我有一个功能定义缺失的分支但该功能仍在使用导致崩溃.必须在合并期间删除函数定义.我已经完成了'git log -p'并搜索了函数定义,我可以看到它被定义但是后来无法找到它被删除.这让我相信'git log -p'没有显示合并更改?我该如何获得此功能?
这让我相信'git log -p'没有显示合并更改?我该如何获得此功能?
你是对的:默认情况下,git log -p显示合并提交,但甚至不尝试为它显示差异.
正如odradek在评论中写道,添加该-c选项将使git log节目组合差异.您也可以使用--cc(注意两个破折号--cc,相对于一个破折号-c),它也显示组合差异,或者-m,为了差异目的有效地分割合并,并且针对该父亲显示每个父亲一个差异.
这三个选项可以同时使用git show.无论出于何种原因,不过,git show 默认以--cc同时git log默认什么都没有.
三个选项之间的区别仅在某些合并时才会明确,并且显示它们有点棘手.但是,我们可以说清楚一件事:任何组合差异只显示与所有父母不同的文件. 也就是说,既git show -c和git show --cc修剪什么显示尝试是有益的.(--cc形式可能会削减-c,取决于可以显示的内容.但是,我没有一个方便的例子.)
例如,考虑在Git存储库中为Git 提交3e5c63943d35be1804d302c0393affc4916c3dc3.这是一个合并(与父母c13c783...及20690b2...,如果我们运行两个独立的 git diff命令,我们可以看到,相比于它的第一个父母,只有两个文件改变:
$ git diff --name-status 3e5c639^1 3e5c639
M builtin/remote.c
M t/t5505-remote.sh
Run Code Online (Sandbox Code Playgroud)
但与其第二个父级相比,许多文件(包括相同的两个)都会发生变化:
$ 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]
Run Code Online (Sandbox Code Playgroud)
如果我git show --cc继续这样做,我根本就没有差异列表; 如果我git show -c继续它,我得到一个差异列表为builtin/remote.c和t/t5505-remote.sh.
如果我git show -m继续这样做,我会得到两个单独的git diff列表. 两者都不是"组合差异".第一个开始于:
commit 3e5c63943d35be1804d302c0393affc4916c3dc3 (from
c13c783c9d3d7d3eff937b7bf3642d2a7fe32644)
Run Code Online (Sandbox Code Playgroud)
并显示前两个文件.第二个开始于:
commit 3e5c63943d35be1804d302c0393affc4916c3dc3 (from
20690b213975ad3e9b1bc851f434d818bd2d1de9)
Run Code Online (Sandbox Code Playgroud)
并显示所有339个文件.
使用-m是真正的大锤子,但你需要通过大量的工作进行大量的分类.使用--cc或-c通常就足够了.
(在查找此类更改时git log -p,其他可能有用的方法是添加--full-history以确保在每个合并后git log跟随两个分支.只有在通过添加-- <path>选项进行历史记录简化时才需要这样做.)
这让我相信 '
git log -p' 不显示合并更改?
确实如此,在 Git 2.31(2021 年第一季度)中:“ git log” (man)学到了一个新--diff-merges=<how>选项。
对于 git 2.33(2021 年第三季度),git log -m将意味着-p(补丁)(请参阅本答案的末尾)。
请参阅提交 af04d8f、提交 1d24509、提交 e58142a、提交8efd2ef、提交b5ffa9e、提交 388091f 、提交 5071c75、提交a6d19ec 、提交5733b20、提交 8c0ba52、提交 255a4da、提交 3d2b5f2、提交a6e66af,提交 d9b1bc6,提交 1a2c4d8,提交 6fc944d,提交ec315c6、提交 14c14b4、提交 e121b4b、提交 0c627f5 、提交 3291eea、提交 3b6c17b、提交 09322b1、提交564a4fc 、提交4f54544 、提交7acf0d0、提交18f0947 、提交a37eec6、提交 3d4fd94、提交027c478、提交 299a663、提交 891e417(2020 年 12 月 21 日) )作者:谢尔盖·奥加诺夫(Sergey Organov sorganov)。
(由Junio C Hamano 合并 -- gitster--在提交 aac006a中,2021 年 2 月 5 日)
diff-merges:实施新的价值观--diff-merges签署人:谢尔盖·奥加诺夫
我们首先将新选项实现为其原始选项的精确同义词,以使所有基础设施正确,并为以后的提交保留功能改进。
实现了以下值:
Run Code Online (Sandbox Code Playgroud)--diff-merges= old equivalent first|first-parent = --first-parent (only format implications) sep|separate = -m comb|combined = -c dense| dense-combined = `--cc`
diff-merges:添加旧的助记符对应项--diff-merges签署人:谢尔盖·奥加诺夫
--diff-merges={m|c|cc}对于那些习惯了旧选项的人来说,这会添加与旧选项的助记符相匹配的值。请注意,例如, 的
--diff-meres=cc行为与 不同--cc,因为后者暗示-p并因此为所有提交启用差异,而前者仅为合并提交启用差异输出。
diff-merges: 添加 '--diff-merges=1' 作为 'first-parent'的同义词签署人:谢尔盖·奥加诺夫
正如我们现在所拥有的
--diff-merges={m|c|cc},添加--diff-merges=1--diff-merges=first-parent 作为同义词,以使其具有更短的助记符。
doc/git-show: 包括 --diff-merges 描述签署人:谢尔盖·奥加诺夫
将选项描述
--diff-merges从git-log.txt移至diff-options.txt,以便将其包含在( man )帮助中。git-show
diff-options现在包含在其手册页中:
--diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)
--no-diff-merges指定用于合并提交的 diff 格式。默认值为 {diff-merges-default} 除非
--first-parent正在使用,在这种情况下first-parent为默认值。
--diff-merges=(off|none):
--no-diff-merges:禁用合并提交的差异输出。对于覆盖隐含值很有用。
--diff-merges=first-parent:
--diff-merges=1:此选项使合并提交仅显示相对于第一个父级的完整差异。
--diff-merges=separate:
--diff-merges=m:
-m:这使得合并提交显示每个父级的完整差异。
为每个父级生成单独的日志条目和差异。
-m如果没有 则不会产生任何输出-p。
--diff-merges=combined:
--diff-merges=c:
-c:使用此选项,合并提交的 diff 输出会同时显示每个父级与合并结果的差异,而不是一次显示父级与结果之间的成对差异。
此外,它仅列出所有父级修改的文件。
-c暗示-p。
--diff-merges=dense-combined:
--diff-merges=cc:
--cc:使用此选项,
--diff-merges=combined通过省略无趣的大块(其父级中的内容只有两个变体)而进一步压缩 产生的输出,并且合并结果会选择其中一个而不进行修改。--cc暗示-p。
--combined-all-paths此标志导致组合差异(用于合并提交)列出所有父级的文件名。因此,它仅在使用时有效
--diff-merges=[dense-]combined,并且可能仅在检测到文件名更改时有用(即,当已请求重命名或复制检测时)。endif::git-log[]
git log现在包含在其手册页中:
:diff-合并-默认:
off
git show现在包含在其手册页中:
DIFF FORMATTING以下选项可用于更改
git show生成 diff 输出的方式。
git show现在包含在其手册页中:
:diff-合并-默认:
dense-combined
这是基于 Git 2.29(2020 年第 4 季度)的工作,正式记录为:
请参阅Jeff King的提交 5fbb4bc、提交 9a6d515、提交 6cea104 、提交6f2e02a 、提交9ab89a2、提交 6fae74b、提交 eed5332(2020 年 7 月 29 日)。(由Junio C Hamano 合并 -- --在提交 eca8c62中,2020 年 8 月 17 日)peff
gitster
doc/git-log:澄清合并提交差异的处理签署人:杰夫·金
令人惊讶的是,
git-log默认情况下不显示合并提交的任何差异。
可以说“ ”是一个合理的默认值,但它非常昂贵(这就是为什么我们为“ ” (man)而不是“ ”--cc打开它)。git showgit log让我们至少记录一下当前的行为,包括最近的“
--first-parent implies -m”案例
git log现在包含在其手册页中:
请注意,除非给出
-c、--cc或-m之一,否则合并提交将永远不会显示差异,即使--patch选择了类似的差异格式,也不会匹配诸如 之类的搜索选项-S。例外情况是在
--first-parent使用时,合并被视为正常的单父提交(这可以通过提供组合差异选项或 with 来覆盖--no-diff-merges)。
而且你还有:
为了在“”选项与“ ” ( man )一起使用时取消隐式“”
-m选项,我们在主题中添加了“”选项。--first-parentgit log--[no-]diff-mergesjk/log-fp-implies-m要保持开放状态以允许“
--diff-merges”选项采用指示如何计算合并提交的补丁的值(例如“cc”?“-p针对第一个父级?”),请重新定义“--diff-merges”以采用非可选值,并实现“off” 与“ ”意思相同--no-diff-merges。
请参阅提交 298889d、提交 405a2fd、提交 6501580(2020 年 8 月 6 日),作者:Sergey Organov ( sorganov)。
(由Junio C Hamano 合并 -- gitster--在提交 a555b51中,2020 年 8 月 17 日)
doc/git-log: 描述--diff-merges=off签署人:谢尔盖·奥加诺夫
git log现在包含在其手册页中:
--diff-merges=off
--no-diff-merges禁用合并提交的差异输出(默认)。
可用于覆盖-m、-c或--cc。
在 Git 2.32(2021 年第 2 季度)中,“ git log” (man)学习了--diff-merges=<style>选项,以及关联的配置变量log.diffMerges。
请参阅提交 364bc11、提交 17c13e6、提交 38fc4db、提交 26a0f58、提交 4320815(2021 年 4 月 13 日),作者:Sergey Organov ( sorganov)。
(由Junio C Hamano 合并 -- gitster--在提交 59bb0aa中,2021 年 4 月 30 日)
diff-merges: 引入 log.diffMerges 配置变量签署人:谢尔盖·奥加诺夫
新的配置变量设置将使用的
log.diffMerges格式。 默认为“单独”。--diff-merges=on添加了 的文档
log.diffMerges。
git config现在包含在其手册页中:
log.diffMerges设置用于合并提交的默认差异格式。详情请
--diff-merges参阅。git log默认为separate.
在 Git 2.33(2021 年第 3 季度)中,“ ” ( man )-m -m中的“ ”选项未指定 diff 所需的格式(如果有),但没有任何可见效果;它现在意味着生成了某种形式的 diff(默认情况下为“--patch”)。git log
请参阅提交 f5bfcc8、提交 fd16a39、提交 1e20a40、提交 23f6d40、提交 19b2517、提交 e0b1642、提交 3ae7fe2、提交 faf16d4、提交 48229c1、提交 7a55fa0(2021 年 5 月 21 日),作者:Sergey Organov ( sorganov)。
(由Junio C Hamano 合并 -- gitster--在提交 8e444e6中,2021 年 6 月 14 日)
diff-merges:让“-m”暗示“-p”签署人:谢尔盖·奥加诺夫
修复
-c/之间长期存在的不一致,--cc这些不一致确实暗示-p了一侧,但-m并不暗示-p了另一侧。相应地更改相应的测试,因为“
log -m”输出现在应该与“”匹配log -m -p,而不仅仅是“log”。相应地更改文档。
笔记:
打完这个补丁后
Run Code Online (Sandbox Code Playgroud)git log -m生成差异而无需提供
-p,这提高了一致性和可用性。如果将“ ”配置变量设置为“ ”以强制仅生成与第一个父级相关的常规差异,
它会变得更加有用。log.diffMergesfirst-parent-m但是,当在命令行上显式提供特定的 diff 格式时,此补丁不会改变行为,因此像这样的命令
git log -m --raw git log -m -
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |