我遇到一个问题,git 说提交已 merge ,但是
提交的更改不在我的工作树中。让事情变得更奇怪的是,
git log --name-status 362dde7
告诉我提交修改了一个文件,但是
git log -- path/to/modified/file.java
不显示提交。例如:
确保有问题的提交同时存在于开发分支和功能分支上。
$ git branch --contains 362dde74f142831c99820b999558a2e8f49f66e8
* dev
feature
列出提交修改的文件。
$ git show --name-status 362dde74f142831c99820b999558a2e8f49f66e8
# commit summary... #
M path/to/modified/file.java
现在,当我执行相反操作(列出已修改文件的提交)时,未列出提交。
$ git log path/to/modified/file.java
# Commit 362dde7 isn't listed here
如果我切换到功能分支并执行相同的步骤,一切都会按预期进行。
$ git checkout feature
$ git show --name-status 362dde74f142831c99820b999558a2e8f49f66e8
# commit summary... #
M path/to/modified/file.java
$ git log path/to/modified/file.java
362dde7 Commit summary
基本上,dev
和 feature
上都存在相同的提交,但工作树更改仅在我 check out feature
时显示.有谁知道为什么会这样?
最佳答案
用 --full-history
再试一次。当 git log
正在寻找修改路径的提交时,默认情况下它会执行 history simplification ,也就是说它没有显示任何提交,从这些提交中可以很容易地看出所有更改已被删除或已经 merge (因此后者出现在 git 无论如何都会列出的其他提交中)。
考虑这张图,其中提交由“路径”的内容标识:
o---o---A---A---B master HEAD
\ /
o---X---Y topic
想法是,git 假设当前 checkout 中的某些内容提示您追查 checkout 文件中的更改源 — 如果在 merge 点, merge 结果中没有显示来自一个父项的更改,则没有任何更改该 parent 的历史影响了您的文件副本。
考虑 cherry-picks 和 squash merge 和拒绝更改以及广泛传播的修补程序和多个 pull 源。
关于git - 为什么提交引入的更改没有显示在我的工作树中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234836/