我希望它能显示指定文件的所有更改(提交),但它不会这样做。它只显示了其中的一部分。我想它与合并有关,但我不知道这里可能出现什么问题。有人可以解释一下吗?
UPD 我能够在测试回购中重现我的特定问题:
#!/usr/bin/env bash
set -eu
rm -rf 1
mkdir 1 && cd 1
git init
mkdir 1
echo m1 > 1/m1 && git add 1/m1 && git commit -m m1
git co -b b1
echo m11 > 1/m1 && git add 1/m1 && git commit -m b11
echo m1 > 1/m1 && git add 1/m1 && git commit -m b12
git checkout master
echo m2 > m2 && git add m2 && git commit -m m2
git merge b1 -m 'merge b1'
git --no-pager log --graph --oneline --decorate --all
git --no-pager log --oneline 1
最后一个命令未列出提交b11
和b12
。
答案 0 :(得分:4)
使用package.json
。如果您想要跟踪重命名,您可能还想添加git log -m -p
(--follow
代码非常hacky并且仅适用于某些情况,并且我不知道如果重命名点出现在合并)。
默认情况下,即使您要求特定路径,--follow
也不会显示任何合并提交。 git log -p
标志有效地告诉-m
将每个合并提交分成两个 1 虚拟提交,一个针对每个父提交。然后它会显示针对每个父项的更改,此时您将看到对指定路径的更改。
(注意:在合并提交中使用git log
默认情况下会显示组合差异,包括查看特定路径时。组合差异会抑制没有更改的文件与两个/所有父级相比,所以{{ 1}}在这里也可能有用。)
如DavidN's answer所述,如果您想查看所有引用,请添加git show
(或-m
,--all
和/或--branches
)所有分支,所有标签等。)。
对于特别复杂的情况,请参阅--tags
,它可以生成可以过滤的引用名称,然后传递给--remotes
命令。
1 假设合并只有两个父项 - 如果有更多,则合并将分为 N 有效提交,即 N 这样的虚拟提交。您可以通过其提交ID不再是正常的SHA-1哈希来识别每个虚拟提交。相反,它是一对哈希:合并的ID后跟特定的父级。
答案 1 :(得分:1)
投入 - 所有标志? git log branch1 branch2 -- filePath
默认情况下,log仅跟随当前分支。您可以在命令--all
上列出所有分支名称,或者d3.json() {}
标志列出所有可能的分支。
答案 2 :(得分:0)
所以,我基本上或多或少回答了我的问题,试图在测试回购中重现这个问题。在我的情况下,它发生在比较分支更改文件,然后将其恢复到它所处的状态时。也就是说,当合并作为一个整体不会对文件引入更改时。但不确定为什么会这样。但它必须与history simplification事物有关。