git pull --rebase 如何工作以及远程提交历史记录中会显示什么?

问题描述 投票:0回答:1

我正在做一个项目。假设我克隆了一个具有

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 gitlab version-control bitbucket rebase
1个回答
0
投票

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
,并获取新的、重写的提交。

© www.soinside.com 2019 - 2024. All rights reserved.