Git diff显示太多文件

时间:2016-12-05 18:04:56

标签: git tfs git-merge git-diff git-log

当在QA中创建TFS拉取请求时,我感到震惊的是它说有300个文件被修改,尽管期望不超过20个。

当我运行git log --oneline --graph QA..MyCode时,它返回8次提交(与TFS中显示的相同):

* 4db6392 Message Hidden (3 files)
* 9fdda73 Message Hidden (4 files)
*   64bbab8 Message Hidden (3 files)
|\
| * 1ca059d Merge master -> MyCode (13 files)
| * 3200fe0 Message Hidden (1 file)
| * e27653c Message Hidden (1 file)
| * cd57d2f Message Hidden (1 file)
* e2afeef Message Hidden (9 files)

使用git show --name-only *SHA*找到括号中的文件数,在许多情况下,同一文件在不同的提交中被更改。

但是,当我运行git diff --name-only QA..MyCode时,它会列出304个文件。

最后一次e2afeef之前的提交是41e68bb,如果按预期运行git log QA..41e68bb则不返回任何内容。但是运行git diff --name-only QA..41e68bb会返回大约680个文件。

我很困惑!任何人都可以解释发生了什么,或者指出我如何进一步调查的正确方向?

1 个答案:

答案 0 :(得分:0)

<commit>..<commit> diff的含义与logrebase等)的含义不同。来自git diff --help

   Comparing branches

           $ git diff topic master    (1)
           $ git diff topic..master   (2)
           $ git diff topic...master  (3)

       1. Changes between the tips of the topic and the master branches.
       2. Same as above.
       3. Changes that occurred on the master branch since when the topic branch was started off it.

我认为您需要的是示例(3) - &gt; git diff --name-only QA...MyCode
更新
正在运行git merge-base --all QA MyCode给出了2个sha1 - 明显的十字合并标志。

--o--p--q--r--s   <-QA
   \/
   /\
--A--B--C--D--E   <-MyCode

最好重写MyCode的历史(我认为它是一个私人分支机构,没有任何基地可以使用它)

--o--p--q--r--s   <-QA
   \/
   /\
--A--B--C--D--E   <-MyCode-backup
   \
    \b'-c'-d'-e'  <-MyCode

图表链接o-B将会丢失,但不会丢失链B-E的内容。

git checkout MyCode
git branch MyCodeBackup  #this branch will keep original B-E reachable
gir rebase --no-ff A  #b'-e' recreation
git diff MyCode MyCodeBackup #for test - should give nothing - content equal
git diff QA...MyCode #supposedly of sane size

您始终可以git reset --hard MyCodeBackup返回原始状态。