我们有一个中央存储库,其中有10多个开发人员。
我正在帮助我的好友(他的OOO)将其PR合并到master
中。由于另一个PR首先被合并,因此他的PR现在存在合并冲突。我要做的就是检出他的分支,以当前的master
为基础,解决所有冲突,将git push
提交到他的远程功能分支,并更新PR,并合并它。
就是这么简单,让我发疯的是:每当我解决所有冲突之后,打git rebase --continue
,然后我做git push
,这给了我这个错误:
On branch this_is_cool_branch
Your branch and 'origin/this_is_cool_branch' have diverged,
and have 2698 and 2 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
我按照git pull
的指示进行操作,然后提取了大量与我的更改/冲突无关的更改,这些更改实际上是其他团队的更改。然后它要求我
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
我绝对不知道为什么会这样,请帮忙。
这是我的步骤:
git clone master_branch
git checkout this_is_cool_branch
(this_is_cool_branch
是我的好友在远程的分支)git rebase master
git rebase --continue
git status
(令人讨厌的是,它给了我下面的错误)
在分支上this_is_cool_branch 您的分支机构和“ origin / this_is_cool_branch”已分歧, 并分别具有2698和2个不同的提交。 (使用“ git pull”将远程分支合并到您的分支中)
什么也没提交,工作树很干净
git pull
,发生了上述噩梦。大量无关的变更被拉进来,并要求我解决合并冲突。
我错过了哪一步?我用错了哪个git命令?
答案 0 :(得分:2)
这是默认git提示与您所用的相反的少数情况之一。与git中的所有其他内容一样,它与您希望操作结束时的历史记录图一样。
简而言之,您需要在改组结束时执行git push --force
,而不是git pull
。
这是为什么:
master
|
v
A -- B -- C -- D -- E
\
F -- G -- H
^
|
coolbranch, origin/coolbranch
在重新设置基准之前,您的历史记录如下所示。 A-E
是主节点,由于拉动请求冲突,因此从B
开始与您的分支不同。重新设置后,会发生以下情况:
master
|
v
A -- B -- C -- D -- E -- F' -- G' -- H'
\ ^
F -- G -- H |
^ coolbranch
|
origin/coolbranch
如您所见,直接将本地coolbranch
推送到服务器上的版本不再有意义。相反,您想告诉服务器接受您的重新提交的内容F'-H'
,并将coolbranch
的分支标签移至H'
。这正是push --force
(或简称为-f
)的作用。
如果您尝试在重新设置基准之后但在git pull
之前执行git push -f
,则将尝试将H
合并到H'
中,这将基本上撤消所有重新确定基准的更改
所以最后的过程应该是这样的:
git checkout master
git pull
现在您有了新合并的PR git checkout coolbranch
git pull coolbranch
或您用来将本地coolbranch
与好友的工作同步的任何方法。git rebase master
git status
。您显示的输出正确无误,并有望为您提供B
中H
和origin/coolbranch
之间的提交次数,以及新重新调整后的{{ 1}}。如果在这种情况下数字看起来很合理(例如,在冲突的PR中它们之间的提交次数不同),那么您的重新定位可能很好。B
之后,您应该准备提交无冲突的请求。每当H'
从您身下变身时,只需重复这些步骤即可。