我们正在尝试将一个分支合并到master中,每当我们尝试合并而没有任何更改时,就没有什么可以推动的。该分支有几个新的类和文件master不,并且对master没有的现有文件进行了数百次更改。
我们怎样才能让它合并?如果这是一个典型的问题,我们做错了什么呢?
答案 0 :(得分:1)
您认为"新文件"而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认为"合并基础"使用git merge-base
命令。在上图中,它是B
。
我怀疑你实际上并不想要合并。我想你可能想挑选一些改变。樱桃选择将始终应用更改,即使您的历史中已经存在相同的更改。
这是一个常见问题,通常的做法是让更改流向一个方向。如果分支从master
拉出,那么它唯一合并回master
的时间就是它结束的时间;在最后的反向合并之后,没有新的提交给分支机构。最常见的工作流程不包括两个相互合并的分支,并且双方都在不断发展。
答案 1 :(得分:0)
您必须位于要进行更改的分支中。
在你的主人案例中:
git checkout master
git merge yourBranch
如果您在yourBranch并尝试合并master,那么您什么也得不到,因为您已经拥有了master的所有更改。