Git重新封装一个特定的分支



我可以重新标记一个特定的分支吗?

git reflog显示回购的所有历史记录。但是我想检查一个特定分支的历史,比如production。有办法做到吗?

如文档中所述,git reflog采用一个动作动词(称为<subcommand>)和可选修饰语。该操作默认为show,其可选修饰符是要显示的引用名称。

默认显示HEAD上的操作。(大多数,但不是全部,"日常"命令操作和/或通过HEAD来操作任何其他引用。因此,声称git reflog显示了所有历史实际上是错误的——但它确实显示了大部分,这可能足够接近。)对于显示应用于特定分支名称production的操作的问题,这为您提供了一个直接而明显的答案:

git reflog show production

如文档所述,git reflog showgit log -g --abbrev-commit --pretty=oneline的别名,因此您也可以运行:

git log -g --abbrev-commit --pretty=oneline production

得到完全相同的输出。这里的关键开关是-g,它指示git log遍历给定ref的refg,而不是从ref指向的提交中可到达的提交。

(你可以继续省略show动词,因为它仍然是默认的,尽管在这种情况下,我建议包括它-例如,如果你的分支被命名为showexpire,名称将被误认为是动词!)

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_ORDERREV_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";错误。

相关内容

  • 没有找到相关文章

最新更新