繁体   English   中英

Git reflog 一个特定的分支?

[英]Git reflog a specific branch?

我可以重新登录特定的分支吗?

git reflog显示 repo 上的所有历史记录。 但我想检查一个特定分支的历史,比如production 有没有办法做到这一点?

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

默认是在HEAD上显示操作。 (大多数(但不是全部)“日常”命令在 HEAD 上和/或通过HEAD运行,以便对任何其他引用进行操作。因此, git reflog显示所有历史记录的说法实际上是错误的——但它确实显示了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 指向的提交到达的提交。

(您可以继续省略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>可以指定为计数或日期。

当没有给出明确的<ref>参数时,它默认为当前分支(或 HEAD,如果它是分离的)。


确保使用 Git 2.35(2022 年第一季度),因为它修复了一个错误:

请参阅Han-Wen Nienhuys ( hanwen )commit 6527925commit 3474b60commit 6887f69commit 21f0e85commit f246349 (2021 年 12 月 2 日)。
(由Junio C Hamano -- gitster --提交 250ca49中合并,2021 年 12 月 15 日)

show-branch : 显示 reflog 消息

签字人:Han-Wen Nienhuys

之前, --reflog选项会在 reflog 消息中查找“ \t ”。
由于refs.c已经解析了 reflog 行,因此从未找到 '\t',并且show-branch --reflog ( man )总是会说 " (none) " 作为 reflog 消息


并注意:“ git show-branchman的“ --current ”选项应该与--reflog模式不兼容,但这并未强制执行,已在 Git 2.37(2022 年第三季度)中更正。

请参阅Junio C Hamano ( gitster )提交 41c64ae (2022 年 4 月 21 日)。
(由Junio C Hamano -- gitster --提交 18254f1中合并,2022 年 5 月 25 日)

show-branch : -g--current不兼容

报告人:Gregory David

当“ --current ”被赋予以--reflog模式运行的“ git show-branchman时,代码会尝试引用甚至不存在的“ reflog ”消息。
这是因为--current不准备在该模式下工作。

--current ”存在的原因是为了支持这个请求:

我在命令行上列出了分支。
这些是我关心的分支,我用作锚点。
我可能在也可能不在这些主要分支之一。

请确保我可以查看当前分支上关于这些其他分支中的内容的提交。

为了满足该请求,代码检查当前分支是否在命令行中列出的分支中,并且仅当它不在一个数组的末尾时才将其添加,该数组实际上列出了对象。

reflog 模式另外使用另一个数组来列出 reflog 消息,“ --current ”代码不会添加到该数组中。
这会在 reflog 消息数组的末尾留下一个未初始化的插槽,并导致程序显示垃圾或段错误。

捕获不受支持(且无意义)的组合并以使用错误退出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM