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

问题描述 投票:1回答:1

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

master --> myBranch

进行我们的更新,然后推送到dev

myBranch --> dev

显然,有时我们在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来更新我自己的分支以匹配开发?

git merge-conflict-resolution
1个回答
2
投票

Short answer

使用此序列来提取远程数据并更新分支:

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

Long answer

你的理解是正确的:

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

这也几乎是正确的:

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

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

有一些假设是不正确的,你创建一个SO问题以验证它们是很好的。

首先 - git pull origin dev不是一个普遍正确的命令来更新你的本地分支dev。它的作用是拉动远程devchanges,但它只更新你当地的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中有一些更改,那么您实际上将无法将合并提交推送到远程存储库,并且您将需要首先解决更多冲突。

第三:

我需要进一步更新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
© www.soinside.com 2019 - 2024. All rights reserved.