我可以记录一个特定的分支的引用日志吗?
git reflog
显示仓库上的所有历史记录。但我想要查看一个特定分支(例如production
)的历史记录。是否有方法可以实现?
我可以记录一个特定的分支的引用日志吗?
git reflog
显示仓库上的所有历史记录。但我想要查看一个特定分支(例如production
)的历史记录。是否有方法可以实现?
git reflog
需要一个动作动词(称为<subcommand>
)和可选修饰符。默认操作是show
,其可选修饰符是要显示的引用名称。HEAD
上的操作。(大多数但并不是全部的“日常”命令通过HEAD
来操作或者通过HEAD
操作其他参考。因此声称git reflog
显示所有历史记录实际上是错误的 - 但它确实显示了大部分,这可能已经足够接近了。)这为您提供了一种立即明显的方法来回答有关显示应用于特定分支名称production
的操作的问题:git reflog show production
正如文档所述,git reflog show
是 git log -g --abbrev-commit --pretty=oneline
的别名,因此您也可以运行:
git log -g --abbrev-commit --pretty=oneline
是 git reflog show
的同义词,具体请参阅文档。
git log -g --abbrev-commit --pretty=oneline production
为了获得完全相同的输出,关键在于使用-g
开关,它指示git log
遍历给定引用的reflog,而不是从该引用指向的提交可达的提交。
(您可以继续省略show
动词,因为它仍然是默认值,但对于这种情况,我建议包括它 - 例如,如果您的分支命名为show
或expire
,则名称将被误认为是动词!)
git reflog [show] ref
中的ref可以是git哈希值,或者任何git能够解析为哈希值的东西。比如一个分支名:
git reflog production
production
)的历史记录。git show-branch (-g|--reflog)
。 git show-branch --reflog production
-g
/--reflog[=<n>[,<base>]] [<ref>]
显示给定引用的最近<n>
个引用日志条目。
如果指定了<base>
,则从该条目开始返回<n>
个条目。
<base>
可以指定为计数或日期。
当没有明确指定<ref>
参数时,默认为当前分支(或HEAD如果它是分离状态)。
请确保使用 Git 2.35(2022 Q1),因为它修复了一个错误:
查看提交 6527925,提交 3474b60,提交 6887f69,提交 21f0e85,提交 f246349(2021年12月2日)由Han-Wen Nienhuys(hanwen
)。gitster
--合并于提交 250ca49,2021年12月15日)
show-branch
:显示 reflog 消息
Signed-off-by: Han-Wen Nienhuys--reflog
选项会在引用日志消息中查找'\t
'。refs.c
已经解析了引用日志行,因此永远找不到'\t',并且show-branch --reflog
(man)总是会显示"(无)"作为引用日志消息。
git show-branch
"(man) 的 "--current
" 选项应该与 --reflog
模式不兼容,但这一点没有被强制执行,这在 Git 2.37 (2022 年第三季度) 中已经得到了修正。gitster
)提交。gitster
--在提交18254f1中合并,2022年5月25日)
当在
show-branch
:使用-g
和--current
是不兼容的报告者:Gregory David
--reflog
模式下运行 "git show-branch
"(man) 命令时,如果给定 "--current
" 参数,代码会尝试引用一个甚至不存在的 "reflog
" 信息。--current
参数没有准备在该模式下工作。--current
" 的存在是为了支持以下请求:
我通过命令行列出分支。
这些是我关心的分支,我将它们作为锚定点使用。
我可能在其中一个主分支上,也可能不在。--current
" 代码没有将其添加进去。
这导致了 reflog 信息数组末尾存在一个未初始化的槽位,从而导致程序显示垃圾内容或段错误。git show-branch --no-reflog
是无效的,Git 2.42(2023年第三季度)现在明确指出了这一点。gitster
)进行。gitster
--合并于提交 d6966f6,2023年7月27日)
show-branch
: 拒绝 --[no-](topo|date)-order
"git show-branch
"(man) --no-topo-order
的行为与 git show-branch --topo-order
(man) 完全相同,这是毫无意义的。REV_SORT_IN_GRAPH_ORDER
或 REV_SORT_BY_COMMIT_DATE
来选择拓扑排序或日期排序,并且 REV_SORT_IN_GRAPH_ORDER
恰好等于 0。 OPT_SET_INT()
宏会将目标变量赋值为其选项的否定形式的 0。
"--no-date-order
" 凑巧地出于同样的原因与 "--topo-order
" 表现完全一致,目前看起来有点合理,但一旦我们添加第三种排序方式,这种 "有点合理" 就会迅速崩溃。
当只有 A 和 B 两个选择时,非 A 可能是 B,但一旦你的选择范围扩大到 A、B 和 C,非 A 并不意味着 B。
只需将这两个排序选项标记为不接受否定,并添加一个缺失的测试。
"git show-branch --no-reflog
" 也不能被否定,所以我们在这里加入一个测试。