在将来的更新中处理合并冲突

时间:2019-04-10 00:43:29

标签: git merge-conflict-resolution

在这里寻找最佳实践。我们的过程是从master那里创建一个新分支

master --> myBranch

进行更新,然后推送至开发人员

myBranch --> dev

很明显,有时我们在开发人员上存在合并冲突。在这种情况下,我们通过以下方式结帐我们的分支机构:

git fetch origin myBranch
git checkout dev
git merge FETCH_HEAD

然后我们解决冲突并...

git push origin HEAD

我对上述内容的理解是,我将myBranch手动合并到dev中,然后将本地dev更改推送到remote。

通常到此为止。

但是现在我需要对myBranch进行进一步的更新,并推送到dev,这就是我的困扰。我现在是否(可能)会遇到与以前相同的冲突?这里的最佳做法是什么?我应该做git pull origin dev来更新自己的分支以匹配dev吗?

1 个答案:

答案 0 :(得分:2)

简短回答

按照以下顺序提取远程数据并更新分支:

git checkout myBranch
git pull

git checkout dev
git pull

git merge myBranch
... resolve conflicts ...
git push HEAD


如果myBranch将再次编辑文件的相同部分,将来有可能再次发生相似冲突。但是,冲突永远不会完全相同。 如果仍要避免这种情况-您需要将合并提交推送到myBranch(但请注意,它将所有dev更改都带到myBranch):

git checkout myBranch
git merge dev
... this is a Fast-Forward merge ...
git push HEAD

长答案

您的理解是正确的:

  

...我正在将myBranch手动合并到dev中,然后将本地dev更改推送到remote。

这几乎也是正确的:

  

我应该做一个git pull origin dev来更新自己的分支以匹配dev吗?

所以,是的-当前方法确实将myBranch手动合并到dev中,然后将dev推送到远程存储库中。是的-最好先更新本地dev

有两个不正确的假设,很高兴您创建了一个SO问题来验证它们。

首先-git pull origin dev不是更新您本地分支机构dev的通用命令。它的作用是拉动远程dev的更改,但是仅当您已经在本地dev上时,它才会更新。似乎您不是-因为在提供的示例中,您在合并FETCH_HEAD之前先检查了该分支。因此,建议要么在拉出更改之前先检查分支:

git checkout dev
git pull origin dev

git fetch origin myBranch
git merge FETCH_HEAD

git push HEAD

或使用其他命令来获取更改并更新您的本地分支(您当前不能在该分支上):

git fetch origin dev:dev
git checkout dev

git fetch origin myBranch
git merge FETCH_HEAD

git push HEAD

但是可能更简单的是仅提取所有更新,然后合并所需的分支:

git checkout dev
git pull
git merge origin/myBranch

git push HEAD

但是,以上所有代码段均未将本地myBranch更新为在远程存储库中所做的更改,因此不便进行进一步的工作。因此,最佳做法是在合并两个本地分支之前先对其进行更新:

git checkout myBranch
git pull

git checkout dev
git pull

git merge myBranch
git push HEAD

第二:

  

我应该做一个git pull origin dev来更新自己的分支以匹配dev吗?

这不仅是合并所必需的,而且还具有将更改推回的能力。如果您不会更新本地dev,而远程dev中有一些更改,那么您将无法将合并提交推送到远程存储库,因此您需要解决首先是更多冲突。

第三:

  

我需要对myBranch进行进一步的更新...我现在(可能)不会像以前一样遇到相同的冲突吗?

这是可能的,尽管这些冲突不会完全相同。为了获得它们,myBranch将需要修改在dev中更改的代码部分(包括该合并提交中的内容)。修改其他文件甚至同一文件其他部分中的代码不会产生冲突。为避免冲突,您最好也将myBranchdev同步(如果您可以看到其他dev的更改已移至myBranch):

... do all the pull-merge-push stuff as suggested above ...

git checkout myBranch
git merge dev
... this is a Fast-Forward merge ...
git push HEAD
相关问题