我有一个缺少函数定义的分支但该函数仍在使用导致崩溃。必须在合并期间删除函数定义。我已经完成了'git log -p'并搜索了函数定义,我可以看到它被定义但是后来无法找到它被删除。这让我相信'git log -p'没有显示合并更改?我该如何获得此功能?
答案 0 :(得分:5)
这让我相信' git log -p'没有显示合并更改?我该如何获得此功能?
你是对的:默认情况下,git log -p
会显示合并提交,但甚至不会尝试为它显示差异。
作为odradek wrote in a comment,添加-c
选项会使git log
显示组合差异。您也可以使用--cc
(注意--cc
的两个破折号,-c
的一个破折号),其中还显示组合差异,或-m
,有效分割用于差异目的的合并,并针对该父项显示每个父项一个差异。
git show
可以使用这三个相同的选项。不管出于何种原因,git show
默认到--cc
,而git log
默认为什么都没有。
这三个选项之间的区别仅在某些合并时很明显,而且显示它们有点棘手。我们可以,但是,非常明确地说一句话:任何组合差异仅显示与所有父母不同的文件。即两者git show -c
和git show --cc
修改显示的内容以尝试提供帮助。 (--cc
表单可能会裁剪超过-c
,具体取决于可以显示的内容。但我没有一个方便的例子。)
例如,考虑commit 3e5c63943d35be1804d302c0393affc4916c3dc3
in the Git repository for Git。这是一个合并(与父母c13c783...
和20690b2...
合并,如果我们运行两个单独的 git diff
命令,我们可以看到,与其第一个父级,只有两个文件发生变化:
$ git diff --name-status 3e5c639^1 3e5c639
M builtin/remote.c
M t/t5505-remote.sh
但与第二个父级相比,许多文件(包括那些相同的两个)发生了变化:
$ git diff --name-status 3e5c639^2 3e5c639 | expand
M .gitignore
M .mailmap
M Documentation/Makefile
A Documentation/RelNotes/2.12.0.txt
M Documentation/SubmittingPatches
A Documentation/asciidoctor-extensions.rb
M Documentation/blame-options.txt
M Documentation/cat-texi.perl
M Documentation/config.txt
M Documentation/diff-config.txt
[snipped here - but the same two files do appear in the 339-entry list]
如果我对此运行git show --cc
,我根本就没有差异列表;如果我在其上运行git show -c
,我会获得builtin/remote.c
和t/t5505-remote.sh
的差异列表。
如果我对此运行git show -m
,我会获得两个单独的git diff
个列表。 都不是"组合差异"。第一个开始于:
commit 3e5c63943d35be1804d302c0393affc4916c3dc3 (from
c13c783c9d3d7d3eff937b7bf3642d2a7fe32644)
并显示前两个文件。第二个开始于:
commit 3e5c63943d35be1804d302c0393affc4916c3dc3 (from
20690b213975ad3e9b1bc851f434d818bd2d1de9)
并显示所有339个文件。
使用-m
是真正的大锤子,但是你需要通过大量的工作进行大量的分类。使用--cc
或-c
通常就足够了。
(在使用git log -p
查找此类更改时,其他可能有用的方法是添加--full-history
以确保git log
跟随 每个合并分支。只有在通过添加-- <path>
选项进行历史记录简化时才需要这样做。)
答案 1 :(得分:0)
这使我相信'git log -p'不显示合并更改?
现在正式发布Git 2.29(2020年第四季度):
请参见commit 5fbb4bc,commit 9a6d515,commit 6cea104,commit 6f2e02a,commit 9ab89a2,commit 6fae74b,commit eed5332(2020年7月29日)由Jeff King (peff
)。
(由Junio C Hamano -- gitster
--在commit eca8c62中合并,2020年8月17日)
doc/git-log
:阐明合并提交差异的处理方式签名人:杰夫·金
令人惊讶的是,
git-log
在默认情况下未显示合并提交的任何差异。
可以说“--cc
”是一个合理的默认值,但是它非常昂贵(这就是为什么我们为“git show
” (man)启用它的原因代表“git log
”。至少要记录当前的行为,包括最近的“
--first-parent implies -m
”案例
git log
现在包含在其man page中:
请注意,除非给出
-c
,--cc
或-m
之一,否则合并提交 即使像--patch
这样的差异格式也不会显示差异 被选中,它们也不会匹配-S
之类的搜索选项。例外是 使用
--first-parent
时,合并被视为正常 单亲提交(可以通过提供 组合差异选项或与--no-diff-merges
一起使用。)
您还有:
要在“
-m
”选项与“git log
” (man)一起使用时取消隐式的“--first-parent
”选项,我们在--[no-]diff-merges
主题中添加了“jk/log-fp-implies-m
”选项。打开大门,允许“
--diff-merges
”选项采用值,该值指示应如何计算合并提交的补丁(例如,“cc
”?“-p
父”),重新定义“--diff-merges
”以获取非可选值,并实现“off
”,这与“--no-diff-merges
”的含义相同。
请参见commit 298889d的commit 405a2fd,commit 6501580,Sergey Organov (sorganov
)(2020年8月6日)。
(由Junio C Hamano -- gitster
--在commit a555b51中合并,2020年8月17日)
doc/git-log
:描述--diff-merges=off
签名人:Sergey Organov
git log
现在包含在其man page中:
--diff-merges=off
--no-diff-merges
为合并提交禁用差异输出(默认)。
有助于覆盖-m
,-c
或--cc
。