我有一个分支机构,我已合并为主机。
在分支上,git log file
在2月9日显示提交
在主人,git log file
不在2月9日显示提交
在master上,git log
确实显示了2月9日的提交
该文件未反映2月9日所做的更改,但git log
显示了提交。它似乎在提交中合并了git,但实际上并没有将它应用于该文件。可能导致这种情况的原因是什么?
编辑:我想我弄清楚发生了什么并在下面回答。为清楚起见,我清理了原来的问题。我原本写的我认为这是git的一个bug,但我认为不再是这种情况了。但是,如果git log file
确实向文件显示了这些提交,那将会很不错。感谢所有帮助过的人,尤其是Borealid。
答案 0 :(得分:4)
引自戴夫:
我通过以下步骤重新创建了类似的情况:
- 创建新的git存储库
- 创建一行文件,将其添加到git并提交(commit#1)
- 创建并切换到分支
- 更改分支中的文件,commit(commit#2)
- 切换到master,更改文件以便存在冲突并提交(commit#3)
- 将分支合并为主文件,文件将发生冲突
- 通过获取master中的所有更改并拒绝分支中的所有更改来解决冲突。基本上,文件应该 看起来就像在大师那样。
- 添加文件并提交更改(提交#4)
现在git log将显示所有四个提交,但git log文件只显示提交#1和#3
git log -- file
仅显示提交#1和#3的共鸣是因为git-log(默认模式)如何遍历提交链;当找到合并提交并且存在父提交使得所选文件在合并之后具有与父提交中相同的内容时,git-log将遵循(一)这样的父提交并拒绝所有其他父提交。
在这种情况下,由于仅通过保持在master中进行的更改来解决合并冲突(该文件在commit#1和commit#4中具有相同的内容),git-log将仅走主分支。
更多细节:http://schacon.github.com/git/git-log.html(“历史简化”部分)
答案 1 :(得分:0)
如果更改前后文件的内容相同,则更改不会修改该文件。
这句话直观地说是正确的,并且由于git的对象模型,它在存储库中也是如此。
您可以检查git log
并找到您认为修改过文件的修订版;如果它在主历史记录中存在,那么您正确地进行了合并,但该变更集对该文件没有影响(因此不包括在git log -- path/to/file
中)。
显然,git merge
并没有被打破 - 你的期望与它所做的不相符。
答案 2 :(得分:0)
我通过以下步骤重新创建了类似的情况:
现在git log
将显示所有四个提交,但git log file
只会显示提交#1和#3。