繁体   English   中英

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

[英]How to resolve merge conflict during pull request?

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

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

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

所以我的问题是:

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

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

简短回答

将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

答案很长

如果你运行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相同的内容,这是A - > B - > C - > B'' - > C''。 现在你执行pull请求,如果它被接受,那么你在master分支上确切地提交了这个提交历史记录。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM