我正在做一个项目。假设我克隆了一个具有
A->B->C
提交的存储库“my_repo”。在本地,我在 D
上提交了 day 1
,但不推送。有人在 E
上提交了 day 2
并推送它,使提交历史记录在存储库中为 A->B->C->E
。当我在第 3 天执行 git pull --rebase
时,我的本地提交历史记录变为 A->B->C->E->D
,尽管 D
是在两天前提交的。我本来以为它会按时间顺序排列A->B->C->D->E
。如果我现在将更改推送到远程分支,提交历史记录会是什么样子?谁能帮忙解决这个问题吗?
git pull --rebase
的工作原理是首先运行git fetch
,然后运行git rebase
以在新获取的提交之上获取您的本地提交(简化;它涉及一些reflog魔法来找出哪些本地提交需要重新设置基础) .
最初的历史:
A-B-C < main, origin/main
本地提交后:
A-B-C < origin/main
`-D < main
获取后:
A-B-C--E < origin/main
`-D < main
变基后:
A-B-C-E < origin/main
`-D' < main
将
D
移到 E
之前意味着您需要让 Git 忘记原来的 E
,在 D
之上将 D'
重新创建为 C
,然后在 之上创建一个新的
E'
D'
。然后,您需要告诉参与该项目的其他所有人忘记本地克隆中的原始 E
,并获取新的、重写的提交。