我在做一个项目。假设我克隆了一个包含A->B->C
次提交的仓库“my_repo”。在本地,我在day 1
上提交D
,但不推送。有人在day 2
上执行了一个提交E
,并将其推送,从而在repo中将提交历史记录为A->B->C->E
。当我在第3天执行git pull --rebase
时,我的本地提交历史变成了A->B->C->E->D
,尽管D
是在两天前提交的。我希望它是按时间顺序排列的A->B->C->D->E
。如果我现在将我的修改推送到远程分支,提交历史会是什么样子?任何人都可以帮助这个。
1条答案
按热度按时间eeq64g8w1#
git pull --rebase
的工作原理是先运行git fetch
,然后运行git rebase
,在新获取的提交之上获取 * 您的本地 * 提交(简化;它涉及一些reflog魔法来找出哪些本地提交需要被重定基)。初始病史:
本地提交后:
提取后:
rebase将获取你的 local 提交,这些提交是上游无法访问的,并在上游之上重放它们。唯一一个不能从上游到达,但可以从本地分支到达的提交是commit
D
。upstream中的最新提交是E
。换句话说:Git将重放提交范围E..D
;它只包含D
。变基后:
推送后:
将
D
移到E
之前意味着你需要让Git忘记原来的E
,在C
上重新创建D'
,然后在D'
上创建一个新的E'
。然后,你需要告诉项目中的其他人,忘记他们本地克隆中的原始E
,并获得新的重写提交。