Diff
- 查看工作区(working directory)和暂存区(staged)之间差异:
git diff
- 查看工作区(working directory)与当前仓库版本(repository)HEAD版本差异:
git diff HEAD
- 查看暂存区(staged)与当前仓库版本(repository)差异:
git diff --cached
/git diff --staged
- 不查看具体改动,只查看改动了哪些类:
git diff --stat
Merge
![](./_image/2016-07-14 20-53-25.jpg?r=80)
- 解决冲突后/获取远程最新代码后合并代码:
git merge branchname
,将 branchname 分支上面的代码合并到当前分支 - 保留该存在版本合并log:
git merge --no-ff branchname
参数--no-ff
防止 fast-forward 的提交,详情参考:the difference,fast-forward:分支内容一致,指针直接移动,并未能看出分支信息
Rebase
Rebase 同 Merge 的结果是一样的,就是合并本地、远程的改动,但过程中还有区别。
git checkout mywork git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁 放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的这些补丁应用 到"mywork"分支上。 一张图分清 rebase 和 merge 的区别
![](./_image/2016-07-19 20-35-30.jpg?r=56) 在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用 git-add
命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行: git rebase --continue
这样git会继续应用(apply)余下的补丁。在任何时候,你可以用 --abort 参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。 git rebase --abort