分布式版本控制
合并
-
merge
- 从其它分支合并到当前分支
- 所有的分支路径不变(当前分支、其它分支的路径互相独立)
- 产生一个新的汇合点(commit)
- 对于落后分支只移动HEAD(fast-forward)
-
rebase
- 撤回当前分支的commit,将其它分支的变更合并到当前分支(类似fast-forward),然后将撤回的补丁应用到当前分支上
- 将其它分支的commit合并的基础上应用补丁形成一条路径
- 不产生新的commit,但是撤回的commit更新(注意rebase过程中不commit)
丢弃变更
git reset [--soft] | [--mixed] | [--hard] [<commit>]
- soft 将HEAD后的差异放到暂存区
- mixed 将HEAD及暂存区的差异放到工作目录
- hard 扫清所有差异
撤回提交
last commit
git commit --amend
修改最近一个提交的消息。
revert
git revert [-m parent_number] <commit>
撤回一个commit生成一个新的commit。另,撤回merge-commit后再恢复分支的情况。
rebase
git rebase -i (before_commit, last_commit] [--onto newbase] [<branch>]
在特定的基点newbase
上重新应用(before_commit, last_commit]
补丁。
场景:
- 在分支上修改内容过程中,主干分支已更新,基于主干HEAD重新应用补丁
git rebase master
- 修改当前分支的commit历史
git rebase -i HEAD^^
- 将指定范围内的补丁应用到特定分支上
git rebase -i HEAD~5 HEAD --onto HEAD~7
查看差异
git diff
git diff --staged
git diff HEAD
- None 工作区与暂存区差异
- staged 暂存区与HEAD差异
- HEAD 未提交(工作区+暂存区)与HEAD差异
临时存放工作目录的改动
git stash