以下是可能发生的情况。
当您继续向将被变基的分支添加提交时,可能会出现这种情况。
想象一下我们有两个分支master
和dev
。
master A-B-C
|
dev D-E-F
现在我们将
dev
推送进行审查。
等待审查期间出现了新任务。分支
dev
得到了新的提交,所以本地看起来像这样:
dev A-B-D-E-F-G
注意,在dev
分支中没有C提交。之后,您的拉取请求被接受,并在远程(例如在github上)将您之前的更改合并到了master
分支:
master A-B-C-D'-E'-F'
到那时,您将拥有一个从 C 提交开始的已复制 D'-E'-F' 提交的分支
master
。
但是您的本地
dev
分支不同,它没有 D'-E'-F',因为它只有 D-E-F。更重要的是,它没有 C 提交。
master A-B-C-D'-E'-F'
dev A-B-D-E-F-G
现在您想使用rebase将提交G添加到主分支。
两个分支的共同部分是A-B。所以当您进行reabse时,Git无法识别D'和D是相同的,因为它们从不同的点开始(对于dev
,它从B开始,对于master
,它从C开始)。因此,在新的拉取请求预览中,您将看到不仅提交G,还有D-E-F。
解决方案
快速解决方法是从实际的master
创建新分支,例如temp
分支。
将新提交内容cherry-pick到temp
中。要获取提交的哈希值,只需在dev上尝试git log --oneline
命令。
master A-B-C-D'-E'-F'
dev A-B-D-E-F-G
temp A-B-C-D'-E'-F'-G
temp
分支包括 master
分支上的所有提交,以及来自 dev
分支的新 G 提交。
[master] git checkout -b temp
[temp] git cherry-pick 6e687f90
[temp] git checkout master
[master] git merge temp
另一种可能的方法是将dev
基于master
进行变基,并解决所有冲突。然后从dev
向master
发起拉取请求。如果在dev
上有许多重复提交,这可能是一个痛苦的过程。
git log
命令检查您的提交树。 - Marco Bonelligit add <冲突文件>
,然后执行git rebase --continue
即可。这是正确的吗? - Prateik Darjigit rebase develop
是否有帮助? - tripleee