最佳答案
我理解 Pro Git 中关于 重定基础的危险的场景,作者主要告诉你如何避免重复提交:
不要对已经推送到公共存储库的提交进行重新基准化。
我要告诉你我的特殊情况,因为我认为它不完全符合 Pro Git 的场景,我仍然重复提交结束。
假设我有两个远程分支,和它们的本地对应分支:
origin/master origin/dev
| |
master dev
所有四个分支都包含相同的提交,我将在 dev
中开始开发:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4
dev : C1 C2 C3 C4
几次提交之后,我将更改推送到 origin/dev
:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4 C5 C6 # (2) git push
dev : C1 C2 C3 C4 C5 C6 # (1) git checkout dev, git commit
我必须回到 master
去做一个快速修复:
origin/master : C1 C2 C3 C4 C7 # (2) git push
master : C1 C2 C3 C4 C7 # (1) git checkout master, git commit
origin/dev : C1 C2 C3 C4 C5 C6
dev : C1 C2 C3 C4 C5 C6
回到 dev
,我重新调整了变化的基础,以便在实际开发中包含快速修复:
origin/master : C1 C2 C3 C4 C7
master : C1 C2 C3 C4 C7
origin/dev : C1 C2 C3 C4 C5 C6
dev : C1 C2 C3 C4 C7 C5' C6' # git checkout dev, git rebase master
如果我用 GitX/gitk 显示提交的历史,我会注意到 origin/dev
现在包含两个相同的提交 C5'
和 C6'
,它们与 Git 不同。现在,如果我把变化推到 origin/dev
,这就是结果:
origin/master : C1 C2 C3 C4 C7
master : C1 C2 C3 C4 C7
origin/dev : C1 C2 C3 C4 C5 C6 C7 C5' C6' # git push
dev : C1 C2 C3 C4 C7 C5' C6'
也许我不完全理解 Pro Git 的解释,所以我想知道两件事:
C5
和 C6
后 C7
?