4

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

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

$ 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,但是工作树的更改仅在我feature签出时才显示。有谁知道为什么会这样?

4

2 回答 2

4

再试一次--full-history。当git log正在寻找修改路径的提交时,默认情况下它会进行历史简化,也就是说,它不显示任何提交,这些提交很容易看出所有更改已被删除或已合并(因此后者出现在无论如何,其他一些提交 git 都会列出)。

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

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

这个想法是,git 假定当前结帐中的某些内容提示您查找签出文件中更改的来源——如果在合并点,合并结果中没有出现来自一个父级的更改,则该父级的历史记录中没有任何内容影响了您的文件副本。

想想cherry-picks 和 squash 合并和拒绝的更改以及广泛传播的修补程序和多个拉取源。

于 2013-10-08T00:20:58.393 回答
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

因此,基本上,如果您从另一个分支进行合并但恢复文件合并提交中的任何更改,则内容不会更改,但合并的提交会出现在历史记录中。

于 2013-10-07T21:53:41.027 回答