为什么提交引入的更改不会显示在我的工作树中?

时间:2013-10-07 21:09:08

标签: git

我遇到一个问题,git说提交已合并,但是 提交中的更改不在我的工作树中。为了让事情更加怪异, git log --name-status 362dde7告诉我提交修改了一个文件,但是 git log -- path/to/modified/file.java未显示提交。例如:

确保dev分支和功能分支上存在有问题的提交。

$ 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

基本上,devfeature都存在相同的提交,但工作树更改仅在我feature签出时显示。有没有人知道为什么会这样?

2 个答案:

答案 0 :(得分:4)

使用--full-history再试一次。当git log正在寻找修改路径的提交时,默认情况下它会history simplification,也就是说它没有显示任何提交,从中可以轻易地看到所有更改已被删除或已经合并(后者因此出现在其他一些提交git的列表中。)

考虑这个图,提交由“path”的内容标识:

 o---o---A---A---B  master HEAD
  \         /
   o---X---Y        topic

这个想法是,git假设你当前的结账中的某些内容提示你搜索已检出文件中的更改源 - 如果在合并点,合并结果中没有显示一个父项的更改,则没有任何内容父母的历史影响了您的文件副本。

考虑挑选和压缩合并并拒绝更改和广泛传播的修补程序和多个拉取源。

答案 1 :(得分:3)

$ git init so19234836
Initialized empty Git repository in /tmp/g/so19234836/.git/
$ cd so19234836/
$ echo "content created" > file
$ git add file
$ git commit -m c1
[master (root-commit) a965818] c1
 1 file changed, 1 insertion(+)
 create mode 100644 file
$ git checkout -b feature
Switched to a new branch 'feature'
$ echo "feature change"> file
$ git commit -am f1
[feature eaf4121] f1
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git checkout master 
Switched to branch 'master'
$ git merge -s ours feature
Merge made by the 'ours' strategy.

现在我有类似的回购状态:

$ git log file
commit a965818706c47d065b81a994aeb5fc24cd77d001
Author: Anatoly Kupriyanov <kan.izh@gmail.com>
Date:   Mon Oct 7 22:44:52 2013 +0100

    c1
$ git checkout feature 
Switched to branch 'feature'
$ git log file
commit eaf41212872d784d4e4e50e62167072d35b6167f
Author: Anatoly Kupriyanov <kan.izh@gmail.com>
Date:   Mon Oct 7 22:49:02 2013 +0100

    f1

commit a965818706c47d065b81a994aeb5fc24cd77d001
Author: Anatoly Kupriyanov <kan.izh@gmail.com>
Date:   Mon Oct 7 22:44:52 2013 +0100

    c1

$ git branch --contains eaf41212872d784d4e4e50e62167072d35b6167f
* feature
  master

因此,基本上如果您从另一个分支执行合并但是还原文件的合并提交中的任何更改,则内容不会更改,但合并提交将显示在历史记录中。