- 提交暂存后的修改
git add some-file
git commit -m 'changes to some-file'
- 提交工作目录树中的所有修改
git commit -m 'changes to some-file' -a
- 提交工作目录树中指定的修改
git commit -m 'changes to some-file' some-file
git diff
查看工作目录树中未被暂存的改动,比较的是工作目录树中与暂存区之间的区别
git diff --cached
比较的是暂存区和版本库中的区别,但不会显示没有暂存的修改
git diff HEAD
比较工作目录树(包括暂存和未暂存的修改)与版本库中的差别
- 直接合并(straight merge)
git merge daily/0.0.1
- 压合合并(squashed merge)
git merge --squash daily/0.0.1
(把另一条分支上的全部提交压合成当前分支上的一个提交)
- 拣选合并(cherry-picking)
git cherry-pick -n daily/0.0.1
(把另一条分支上的某个提交合并到当前分支)
git branch -d daily/0.0.1 //-D 为强制删除,不再检查要删除的分支是否已经合并
git branch -m master myMaster //-M 可以覆盖已有分支名称,强制覆盖现有分支
- 察觉某疏忽之前,已经把代码提交了,如果想复用指定的提交,少一条提交记录(只针对最后一次提交)
git commit -m 'add link to blog' -a
git commit -C HEAD -a --amend
- 可以用
^
和
作为提交名称的修饰符来指定某个版本。HEAD^是把版本库复位到当前HEAD之前的那个版本上,把HEAD这个版本的修改扔到工作目录中。而540ecb73则是把版本库复位到540ecb7的曾祖父节点上,并把540ecb7、540ecb7父节点、540ecb7祖父节点上的修改扔到工作目录树中。
git reset
- 从master上拉一个叫daily/0.0.1的新分支,并且检出(check out)到新分支
git checkout master
git branch daily/0.0.1
git checkout daily/0.0.1
git checkout -b daily/0.0.1 master
- 场景:有master和daily/0.0.1分支,都未push过,如何把daily/0.0.1上的修改在master分支末梢重现?
- 方法:使用变基命令git rebase。
git checkout master
git rebase daily/0.0.1
- 场景:对daily/0.0.1分支打过tag标签,并且已经删除daily/0.0.1分支。在没有发布分支的情况下,如何对daily/0.0.1分支打补丁修改
git tag 1.0 daily/0.0.1
git branch -d daily/0.0.1
git branch daily/0.0.2 1.0
git checkout daily/0.0.2
- 场景:daily/0.0.1分支已经有三次提交(
git commit
),如何把后两次的提交合并到master上?
- 方法:使用拣选合并
git checkout master
git cherry-pick -n 321d76f(daily分支第二次的提交名称)
...
git commit //这里不要使用-m参数,编辑器会使用刚刚拣选的提交留言作为现在的提交留言
git checkout HEAD []
git reset HEAD []