如何在拉取请求期间解决合并冲突?

cod*_*fun 8 git tfs pull-request azure-devops

我们通常有主人的个别分支.例如,我们有一个名为"JohnMaster"的分支.John在JohnMaster本地开发他的开发,当他准备推动他的代码掌握时,他将他的分支推到远程,然后从JohnMaster做一个拉取请求.问题在于我们在执行拉取请求时遇到了冲突.

我认为我们可以解决合并冲突的方式是让master关闭并从master - > JohnMaster本地执行rebase,然后在rebase期间解决合并冲突.做底垫后,它不会让我把我的代码备份到远程,因为它说我是2个提交关闭远程但是当(他们是相同的底垫之前)我做了git pull我再弄合并冲突.

我知道最好的做法可能是从master做一个pull请求 - > JohnMaster(反向合并),然后git pull在JohnMaster上做一次,然后再将你的提交推送到远程,但有时人们会忘记然后我们遇到这个问题.

所以我的问题是:

  1. 为什么本地的变基不起作用?
  2. 我们如何解决这个问题?

请注意我们不能直接提交给主人.分支上有安全性需要拉取请求.

Man*_*idt 11

简短回答:

将origin/master合并到JohnMaster中并将其推送到其远程(origin/JohnMaster).现在你可以执行从origin/JohnMaster到master的pull请求,只要master上没有新的提交你就不会遇到合并冲突(master中的提交没有包含在JohnMaster中)

git checkout JohnMaster
git merge origin/master
#solve merge conflicts
git commit
git push
#pull request
git push
Run Code Online (Sandbox Code Playgroud)

答案很长

如果你运行git rebase origin/master实际发生的事情是添加到JohnMaster的提交被重写(在你的情况下是两次提交)并放在master之后.例如,自创建JohnMaster分支以来,B和C已添加到master中,B'和C'已添加到JohnMaster中.重新定位后,你得到A - > B - > C - > B'' - > C''.在rebase之前,你的功能分支上有A - > B' - > C',并且在推送之前你仍然在远程分支上有它.此时Git告诉您,您没有本地B'和C',因为它们已被重写为B''和C'',因此提交了不同的提交.

此时,您可以强制推送您当地的重新历史记录git push -f.有了这个,你消除远程提交B"和C",你会得到一样的,你在起点/ JohnMaster本地有,这是一个- "乙- "ç - > B'’ - > C'’.现在你执行pull请求,如果它被接受,那么你在master分支上确切地提交了这个提交历史记录.

就个人而言,我不喜欢重写远程,已经推动的历史,我认为应该尽可能避免,但它实际上是你的选择.

如果合并产地/掌握到JohnMaster(这是我认为的首选方式),您将所有现有的提交,因为它们是:A - >乙 - > C和A - > B" - > C"和你添加一个新的合并提交M,其中两个分支再次聚集在一起.合并提交是一个包含两个父项的提交,在本例中为C'和C.您可以安全地推送此合并提交而无需强制推送.