尝试将分支合并回 master,合并时没有任何更改。该分支有新的 类 和文件,但合并时没有带那些
Trying to merge a branch back into master, merges with no changes. The branch has new classes and files, but merges in without bringing those
我们正在尝试将一个分支合并回 master,每当我们尝试合并时没有任何更改,就没有什么可以推送的。该分支有几个新的 类 和 master 没有的文件,以及 master 没有的对现有文件的数百个更改。
我们怎样才能让它合并?如果这是一个典型的问题,我们做错了什么导致了这个问题?
您必须在要进行更改的分支中。
你在 master 的情况下:
git checkout master
git merge yourBranch
如果你在你的分支中并尝试合并到 master 中,你什么也得不到,因为你已经拥有 master 的所有更改。
您"new files"的想法和git的想法可能不同。
想象一下这种情况:您在一个分支中创建了一个文件。您将该分支合并到 master
。然后你用新的提交删除 master
中的文件。您的历史记录如下所示:
A ----------------B - E (delete file) - F (master HEAD)
\ /
C (add file) - D - G (branch HEAD)
现在,当你将 G
合并到 F
时,会发生什么?不是您所期望的,因为您的 master
历史记录 已经 包括添加文件的提交。但是该文件存在于 G
中,而不存在于 F
中!但从 git 的角度来看,唯一的 "new" 变化是 G
.
合并会找到您要合并的分支的最近共同祖先。然后它将 自那时起 的所有更改融合到您当前所在的分支中。在该共同祖先之前所做的任何更改都不会重新合并。用git merge-base
命令可以看到git认为是"merge base"。在上图中,就是B
.
我怀疑您实际上并不想在这里进行合并。我认为您可能想挑选一些更改。樱桃选择将始终应用更改,即使您的历史记录中已经存在相同的更改。
这是一个常见问题,通常的做法是使更改流动一个方向。如果一个分支从 master
拉出,那么它唯一一次合并回 master
的时间就是它结束的时候;在最终的反向合并之后,不会对分支进行新的提交。最常见的工作流不包括两个分支相互合并,并且双方都在持续发展。
我们正在尝试将一个分支合并回 master,每当我们尝试合并时没有任何更改,就没有什么可以推送的。该分支有几个新的 类 和 master 没有的文件,以及 master 没有的对现有文件的数百个更改。
我们怎样才能让它合并?如果这是一个典型的问题,我们做错了什么导致了这个问题?
您必须在要进行更改的分支中。
你在 master 的情况下:
git checkout master
git merge yourBranch
如果你在你的分支中并尝试合并到 master 中,你什么也得不到,因为你已经拥有 master 的所有更改。
您"new files"的想法和git的想法可能不同。
想象一下这种情况:您在一个分支中创建了一个文件。您将该分支合并到 master
。然后你用新的提交删除 master
中的文件。您的历史记录如下所示:
A ----------------B - E (delete file) - F (master HEAD) \ / C (add file) - D - G (branch HEAD)
现在,当你将 G
合并到 F
时,会发生什么?不是您所期望的,因为您的 master
历史记录 已经 包括添加文件的提交。但是该文件存在于 G
中,而不存在于 F
中!但从 git 的角度来看,唯一的 "new" 变化是 G
.
合并会找到您要合并的分支的最近共同祖先。然后它将 自那时起 的所有更改融合到您当前所在的分支中。在该共同祖先之前所做的任何更改都不会重新合并。用git merge-base
命令可以看到git认为是"merge base"。在上图中,就是B
.
我怀疑您实际上并不想在这里进行合并。我认为您可能想挑选一些更改。樱桃选择将始终应用更改,即使您的历史记录中已经存在相同的更改。
这是一个常见问题,通常的做法是使更改流动一个方向。如果一个分支从 master
拉出,那么它唯一一次合并回 master
的时间就是它结束的时候;在最终的反向合并之后,不会对分支进行新的提交。最常见的工作流不包括两个分支相互合并,并且双方都在持续发展。