我可以重新标记一个特定的分支吗?git reflog显示存储库上的所有历史记录。但是我想检查一个特定分支的历史,比如production。有办法做到吗?
git reflog
production
vltsax251#
如the documentation中所述,git reflog接受一个动作动词(称为<subcommand>)和可选修饰符。该操作默认为show,其可选修饰符是要显示的引用名称。默认值是显示HEAD上的操作。(大多数,但不是全部,“日常”命令在HEAD上和/或通过HEAD操作,以便在任何其他引用上操作。因此,git reflog显示 all 历史的说法实际上是错误的-但它确实显示了 most,这可能已经足够接近了。)这为显示应用于特定分支名称production的操作的问题提供了一个直接而明显的答案:
<subcommand>
show
HEAD
git reflog show production
字符串正如文档所述,git reflog show是git log -g --abbrev-commit --pretty=oneline的别名,因此您还可以运行:
git reflog show
git log -g --abbrev-commit --pretty=oneline
git log -g --abbrev-commit --pretty=oneline production
型得到完全相同的输出。这里的关键开关是-g,它指示git log遍历给定ref的reflog,而不是从ref指向的提交可到达的提交。(You可以继续省略show动词,因为它仍然是默认的,尽管对于这种情况,我建议包括它-例如,如果您的分支名为show或expire,则名称将被误认为动词!)
-g
git log
expire
vaj7vani2#
git reflog [show] ref其中ref例如可以是git hash,或者任何git可以解析为hash的东西。比如一个分支名称:git reflog production个
git reflog [show] ref
git reflog production
zbwhf8kr3#
但是我想检查一个特定分支的历史,比如production。更新的(Git 2.9.5,2017+)命令是git show-branch (-g|--reflog)
git show-branch (-g|--reflog)
git show-branch --reflog production
字符串
--reflog[=<n>[,<base>]] [<ref>]
显示给定参考的<n>最新参考日志条目。如果给定<base>,则从该条目返回<n>条目。<base>可以指定为count或date。当没有给出显式的<ref>参数时,它默认为当前分支(如果是分离的,则为HEAD)。请确保使用Git 2.35(Q1 2022),因为它修复了一个错误:参见commit 6527925、commit 3474b60、commit 6887f69、commit 21f0e85、commit f246349(2021年12月2日)by Han-Wen Nienhuys ( hanwen )。(由Junio C Hamano -- gitster --合并于commit 250ca49,2021年12月15日)
<n>
<base>
<ref>
hanwen
gitster
show-branch
签字人:汉文年辉以前,--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日)
--reflog
\t
refs.c
show-branch --reflog
(none)
git show-branch
--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 68cbb20,commit 83bb8e5(2023年7月19日)by Junio C Hamano ( gitster )。(由Junio C Hamano -- gitster --合并于commit d6966f6,2023年7月27日)
reflog
git show-branch --no-reflog
--[no-](topo|date)-order
“git show-branch”(man)--no-topo-order的行为与git show-branch --topo-order(man)完全相同,这是无稽之谈。这是因为我们在topo和date之间进行选择,将变量设置为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“完全相同,原因也是一样的,而且它现在是有意义的,但是一旦我们添加了第三种排序方式,“sort-of makes sense”就会很快崩溃。当A和B之间只有两个选择时,非A可能是B,但一旦你的选择变成了A、B和C,非A就不意味着B。只需标记这两个排序选项以拒绝否定,并添加缺少的测试。“git show-branch --no-reflog”也是不可否定的,所以在我们做这个测试的时候,我们可以对它进行测试。您现在将得到一个“unknown option”错误。
--no-topo-order
git show-branch --topo-order
REV_SORT_IN_GRAPH_ORDER
REV_SORT_BY_COMMIT_DATE
OPT_SET_INT()
--no-date-order
--topo-order
unknown option
3条答案
按热度按时间vltsax251#
如the documentation中所述,
git reflog
接受一个动作动词(称为<subcommand>
)和可选修饰符。该操作默认为show
,其可选修饰符是要显示的引用名称。默认值是显示
HEAD
上的操作。(大多数,但不是全部,“日常”命令在HEAD
上和/或通过HEAD
操作,以便在任何其他引用上操作。因此,git reflog
显示 all 历史的说法实际上是错误的-但它确实显示了 most,这可能已经足够接近了。)这为显示应用于特定分支名称production
的操作的问题提供了一个直接而明显的答案:字符串
正如文档所述,
git reflog show
是git log -g --abbrev-commit --pretty=oneline
的别名,因此您还可以运行:型
得到完全相同的输出。这里的关键开关是
-g
,它指示git log
遍历给定ref的reflog,而不是从ref指向的提交可到达的提交。(You可以继续省略
show
动词,因为它仍然是默认的,尽管对于这种情况,我建议包括它-例如,如果您的分支名为show
或expire
,则名称将被误认为动词!)vaj7vani2#
git reflog [show] ref
其中ref例如可以是git hash,或者任何git可以解析为hash的东西。比如一个分支名称:git reflog production
个zbwhf8kr3#
但是我想检查一个特定分支的历史,比如
production
。更新的(Git 2.9.5,2017+)命令是
git show-branch (-g|--reflog)
字符串
-g
/--reflog[=<n>[,<base>]] [<ref>]
显示给定参考的
<n>
最新参考日志条目。如果给定
<base>
,则从该条目返回<n>
条目。<base>
可以指定为count或date。当没有给出显式的
<ref>
参数时,它默认为当前分支(如果是分离的,则为HEAD)。请确保使用Git 2.35(Q1 2022),因为它修复了一个错误:
参见commit 6527925、commit 3474b60、commit 6887f69、commit 21f0e85、commit 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 68cbb20,commit 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_ORDER
或REV_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
”错误。