[英]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 show
是git log -g --abbrev-commit --pretty=oneline
的别名,因此您也可以运行:
git log -g --abbrev-commit --pretty=oneline production
获得完全相同的输出。 这里的关键开关是-g
,它指示git log
遍历给定 ref 的 reflog,而不是从 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>
可以指定为计数或日期。当没有给出明确的
<ref>
参数时,它默认为当前分支(或 HEAD,如果它是分离的)。
确保使用 Git 2.35(2022 年第一季度),因为它修复了一个错误:
请参阅Han-Wen Nienhuys ( hanwen
)的commit 6527925 、 commit 3474b60 、 commit 6887f69 、 commit 21f0e85 、 commit 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-branch
” ( man )的“ --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-branch
” ( man )时,代码会尝试引用甚至不存在的“reflog
”消息。
这是因为--current
不准备在该模式下工作。“
--current
”存在的原因是为了支持这个请求:我在命令行上列出了分支。
这些是我关心的分支,我用作锚点。
我可能在也可能不在这些主要分支之一。请确保我可以查看当前分支上关于这些其他分支中的内容的提交。
为了满足该请求,代码检查当前分支是否在命令行中列出的分支中,并且仅当它不在一个数组的末尾时才将其添加,该数组实际上列出了对象。
reflog 模式另外使用另一个数组来列出 reflog 消息,“
--current
”代码不会添加到该数组中。
这会在 reflog 消息数组的末尾留下一个未初始化的插槽,并导致程序显示垃圾或段错误。捕获不受支持(且无意义)的组合并以使用错误退出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.