Git reflog一个特定的分支?

pbpqsu0x  于 2023-08-01  发布在  Git
关注(0)|答案(3)|浏览(138)

我可以重新标记一个特定的分支吗?
git reflog显示存储库上的所有历史记录。但是我想检查一个特定分支的历史,比如production。有办法做到吗?

vltsax25

vltsax251#

the documentation中所述,git reflog接受一个动作动词(称为<subcommand>)和可选修饰符。该操作默认为show,其可选修饰符是要显示的引用名称。
默认值是显示HEAD上的操作。(大多数,但不是全部,“日常”命令在HEAD上和/或通过HEAD操作,以便在任何其他引用上操作。因此,git reflog显示 all 历史的说法实际上是错误的-但它确实显示了 most,这可能已经足够接近了。)这为显示应用于特定分支名称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的reflog,而不是从ref指向的提交可到达的提交。
(You可以继续省略show动词,因为它仍然是默认的,尽管对于这种情况,我建议包括它-例如,如果您的分支名为showexpire,则名称将被误认为动词!)

vaj7vani

vaj7vani2#

git reflog [show] ref其中ref例如可以是git hash,或者任何git可以解析为hash的东西。比如一个分支名称:
git reflog production

zbwhf8kr

zbwhf8kr3#

但是我想检查一个特定分支的历史,比如production
更新的(Git 2.9.5,2017+)命令是git show-branch (-g|--reflog)

git show-branch --reflog production

字符串

-g / --reflog[=<n>[,<base>]] [<ref>]

显示给定参考的<n>最新参考日志条目。
如果给定<base>,则从该条目返回<n>条目。
<base>可以指定为count或date。
当没有给出显式的<ref>参数时,它默认为当前分支(如果是分离的,则为HEAD)。
请确保使用Git 2.35(Q1 2022),因为它修复了一个错误:
参见commit 6527925commit 3474b60commit 6887f69commit 21f0e85commit f246349(2021年12月2日)by Han-Wen Nienhuys ( hanwen )
(由Junio C Hamano -- gitster --合并于commit 250ca49,2021年12月15日)

show-branch:显示reflog消息

签字人:汉文年辉
以前,--reflog选项会在reflog消息中查找'\t'。
由于refs.c已经解析了reflog行,因此从未找到'\t',并且show-branch --reflog(man)总是将“(none)“作为reflog消息
注意:“git show-branch”(man)的“--current”选项应该与--reflog模式不兼容,但这并没有强制执行,Git 2.37(Q3 2022)已经纠正了这一点。
参见commit 41c64ae(2022年4月21日),作者Junio C Hamano ( gitster )
(由Junio C Hamano -- gitster --合并于commit 18254f1,2022年5月25日)

show-branch-g--current不兼容

报告人:格雷戈里·大卫
当“--current“被赋予在--reflog模式下运行的“git show-branch“(man)时,代码试图引用甚至不存在的“reflog“消息。
这是因为--current不准备在该模式下工作。
--current”存在的原因是为了支持此请求:
我在命令行上列出分支。
这些是我关心的分支,我用它们作为锚点。
我可能在也可能不在这些主要分支之一。
请确保我可以查看当前分支上的提交,以及其他分支中的提交。
为了满足该请求,代码检查当前分支是否在命令行中列出的分支中,并且仅当它不在一个数组的末尾时才添加它,该数组实际上列出了对象。
reflog模式还使用另一个数组来列出reflog消息,“--current”代码没有添加到其中。
这会在reflog消息数组的末尾留下一个未初始化的槽,并导致程序显示垃圾或segfault。
捕获不受支持的(且无意义的)组合,并以使用错误退出。
请注意,git show-branch --no-reflog是无效的,Git 2.42(Q3 2023)现在明确表示它。
参见commit 68cbb20commit 83bb8e5(2023年7月19日)by Junio C Hamano ( gitster )
(由Junio C Hamano -- gitster --合并于commit d6966f6,2023年7月27日)

show-branch:拒绝--[no-](topo|date)-order

git show-branch”(man--no-topo-order的行为与git show-branch --topo-order(man)完全相同,这是无稽之谈。
这是因为我们在topo和date之间进行选择,将变量设置为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“完全相同,原因也是一样的,而且它现在是有意义的,但是一旦我们添加了第三种排序方式,“sort-of makes sense”就会很快崩溃。
当A和B之间只有两个选择时,非A可能是B,但一旦你的选择变成了A、B和C,非A就不意味着B。
只需标记这两个排序选项以拒绝否定,并添加缺少的测试。
git show-branch --no-reflog”也是不可否定的,所以在我们做这个测试的时候,我们可以对它进行测试。
您现在将得到一个“unknown option”错误。

相关问题