我可以重新标记一个特定的分支吗?
git reflog
显示回购的所有历史记录。但是我想检查一个特定分支的历史,比如production
。有办法做到吗?
如文档中所述,git reflog
采用一个动作动词(称为<subcommand>
)和可选修饰语。该操作默认为show
,其可选修饰符是要显示的引用名称。
默认显示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 production
得到完全相同的输出。这里的关键开关是-g
,它指示git log
遍历给定ref的refg,而不是从ref指向的提交中可到达的提交。
(你可以继续省略show
动词,因为它仍然是默认的,尽管在这种情况下,我建议包括它-例如,如果你的分支被命名为show
或expire
,名称将被误认为是动词!)
git reflog [show] ref
,其中ref例如可以是git哈希值,或任何git可以解析为哈希值的东西。例如,分支名称:
git reflog production
但是我想检查一个特定分支的历史记录,比如
production
。
最新的(Git 2.9.5, 2017+)命令是git show-branch (-g|--reflog)
git show-branch --reflog production
-g
/--reflog[=<n>[,<base>]] [<ref>]
显示给定ref的
<n>
最近的ref-log条目。如果给定了
<base>
,则从该表项返回的<n>
项。<base>
可以指定为count或date。当没有明确的
<ref>
参数时,默认为当前分支(如果分离则为HEAD)。
确保使用Git 2.35 (Q1 2022),因为它修复了一个错误:
参见hanhan - wen Nienhuys (hanwen
)的commit 6527925, commit 3474b60, commit 6887f69, commit 21f0e85, commit f246349 (02 Dec 2021)。
(由juno C Hamano—gitster
—在commit 250ca49, 2021年12月15日合并)
show-branch
: show reflog message
以前,
--reflog
选项会在reflog消息中查找't
'。
由于refs.c
已经解析了反射行,因此从未找到't',并且show-branch --reflog
(man)总是显示"(none)
";作为refflog消息
注意:"--current
";选项"git show-branch
"(man)应该与--reflog
模式不兼容,但这并没有强制执行,这已经在Git 2.37 (Q3 2022)中得到了纠正。
参见juno C Hamano (gitster
)的commit 41c64ae (21 Apr 2022)。
(由juno C Hamano—gitster
—在commit 18254f1中合并,2022年5月25日)
show-branch
:-g
和--current
不兼容报告作者:Gregory David
当";
--current
";给予"git show-branch
"(man)在--reflog
模式下运行,代码试图引用一个"reflog
";甚至不存在的消息。
这是因为--current
不准备在该模式下工作。原因"
--current
";我在命令行上列出分支。
这些是我关心的分支,我用它们作为锚点。
我可能在也可能不在这些主要分支之一。请确保我可以查看当前分支上的提交,以及其他分支中的提交。
为了满足该请求,代码检查当前分支是否在命令行中列出的分支中,并且仅当它不在一个数组的末尾时才添加它,该数组实际上列出了对象。
reflog模式另外使用另一个数组来列出reflog消息,其中"
--current
";代码不加到。
这会在reflog消息数组的末尾留下一个未初始化的槽,并导致程序显示垃圾或段错误。捕捉不支持的(无意义的)组合,并以使用错误退出。
注意git show-branch --no-reflog
是无效的,并且Git 2.42 (Q3 2023)现在显式地指出了它。
参见juno C Hamano (gitster
)的commit 68cbb20, commit 83bb8e5 (19 Jul 2023)。
(由juno C Hamano—gitster
—在2023年7月27日的commit d6966f6中合并)
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
,OPT_SET_INT()
和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
";也是不可否定的,所以当我们在这里的时候,请为它添加一个测试。
现在您将得到一个"unknown option
";错误。