Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git merge没有只合并两个文件?_Git_Merge_Git Merge - Fatal编程技术网

Git merge没有只合并两个文件?

Git merge没有只合并两个文件?,git,merge,git-merge,Git,Merge,Git Merge,我有主分支和发布分支。发布分支上的最后一次提交在文件中添加了几行,比如A和B。然后这些更改被合并到主文件中 后来,对master进行了多次其他提交,其中一次再次从A和B中删除了这两行 现在我将master合并到release中。除了两个小冲突外,所有内容都很好地合并,但文件A和B保持不变,并显示了这几行 这怎么会发生?我可以在合并之前签出commit-on-release分支,并以相同的结果再次重复它。是否有任何命令/开关可用于了解合并过程中发生的情况 编辑。 看起来我只是做错了什么,但我不知道

我有主分支和发布分支。发布分支上的最后一次提交在文件中添加了几行,比如A和B。然后这些更改被合并到主文件中

后来,对master进行了多次其他提交,其中一次再次从A和B中删除了这两行

现在我将master合并到release中。除了两个小冲突外,所有内容都很好地合并,但文件A和B保持不变,并显示了这几行

这怎么会发生?我可以在合并之前签出commit-on-release分支,并以相同的结果再次重复它。是否有任何命令/开关可用于了解合并过程中发生的情况

编辑。 看起来我只是做错了什么,但我不知道如何正确地去做。我可以很容易地复制这个问题,它似乎发生了,因为“坏”行首先被添加到master上,然后被删除,然后它们被master合并到发布中,其中“坏”行也出现了。那么大师的两次“歼灭”和释放保持不变,对吗

那么,我在做什么: 7aee9be与“坏”线一起释放 84d7ed2在所有更改之前是主控的,早于上述版本

现在我签出84d7ed2,添加“坏”行,在新的测试分支上提交。 然后我删除“坏”行,提交。 所以测试分支不再有“坏”行。 然后我签出7aee9be并将测试分支合并到其中。”“bad”行返回,合并提交根本没有任何更改。

我将从git bisect开始,以找出问题是从哪里开始的。一旦你有了错误的提交,检查它并从那一点开始跟踪,找出哪里出了问题。因为你的案子确实出了问题

有几种选择: 有人做了重新基址,所以您的提交不太可能被覆盖,但这仍然是一个选项,因为如果有人做了重新基址,您很可能已经知道了。您的分支可能无法使用 有人使用force标志git push origin master-force推送旧代码,这将导致覆盖旧代码 当您拉取pull=fetch+merge时,您遇到了一个冲突,您通过保留行来解决它,因此现在它们将再次签入。
正如我所建议的,试着在git bisect的帮助下弄清楚这一切是什么时候开始的。一旦你发现了什么地方出了问题,解决问题就会容易得多。

这一切都是关于一个国家的共同祖先:

如果在进行最后一次测试时,没有坏线要发布,而坏线是在公共祖先之后的发布中引入的,那么合并不会删除它

因为这个共同的祖先:

发行版引入了错误的路线 测试引入并删除了坏线
在这种情况下,在发行版中合并测试不会删除发行版中的错误行:与公共祖先相比,测试不会引入任何更改,而发行版会。发布版的更改将被保留。

类似于的git diff将有助于理解为什么那个大块头仍然存在。@VonC我更新了问题的更多细节。添加“坏”行、提交是什么意思?是否将发布分支合并到测试分支中?或者您是否在发布分支上进行了相同的提交?如果你做了后者,那就是你的问题。也许你的提交历史和你所做的提交的图表可以帮助我们理解你的意思。git log-graph-decoration-oneline$beforeitstarted..$att问题是一个非常有用的概述。对不起,否。我更新了问题的更多细节。我正在与引入坏行的同一版本合并。@mifki没关系:测试没有添加任何修改,因为坏行是在测试中添加然后删除的。明白了。除了不再做这样的事情之外,还有什么办法可以发现这种情况吗?我只想让release获得最新的内容,而不管该内容的历史记录。@mifki sure:我更喜欢它,而不是重置或重命名分支解决方案