如何查看分支被 rebase 的来源以及它是从哪个分支进行的 rebase?

19

我知道GIT rebase会重写历史记录,即提交ID将更改。但是,有没有办法追踪分支何时被rebase以及从哪个分支进行的rebase?

编辑:我有一个开发分支'A'和一个主题分支'B'。'A'由团队共享。在某个时刻,'A'已经与主流分支进行了rebase。由于rebase(和随后的提交)的结果,当我更新主题分支时,我看到了不一致之处。我正在尝试找出正确的人来解决这些问题。

3个回答

21
git reflog

这将允许您查看所有git工作流的历史记录。在我正在工作的一个项目中,以下是前三个reflog条目:

151a1da HEAD@{0}: filter-branch: rewrite
db8c822 HEAD@{1}: checkout: moving from fixes to master
db8c822 HEAD@{2}: checkout: moving from master to fixes

第一列显示的是SHAID。因此,您可以在此SHAID上使用标准的git命令,例如:git show 151a1da。


18

你可能可以看出是谁做的!当你变基时,由于提交记录被重写,提交者信息将来自执行变基操作的人,而不是原始作者。 (这与作者信息分开处理。)

你可以在gitk(在左下角的差异窗格中)或git log --pretty=fuller的输出中查看此信息(比完整更加详细)。例如日志输出:

commit b8624718b97a39a04637c91ec3517c109f3f681d
Author:     Original Author <original@author.com>
AuthorDate: Sun Aug 8 02:15:10 2010 -0300
Commit:     New Committer <new@committer.com>
CommitDate: Mon Jan 23 17:29:39 2012 -0800

    a lovely commit message

...

提交者的姓名、电子邮件和日期来自实际编写提交的操作。请注意,如果提交已多次重写,则您只会获得最新的信息。

至于从哪里重新基础... 如果重新基础提交的原始版本也在您的历史记录中,那么这很容易。只需搜索完整的历史记录以查找匹配的提交,例如通过提交消息的片段或在提交中更改的内容进行搜索:

git log --all --grep='commit subject from a rebased commit'
git log --all -S'void this_function_was_added() {'

如果你已经找不到原始提交记录,那么这将更加困难。希望你能通过追踪做出该提交的人,如果他们不知道,可以要求他们在其仓库中运行 git reflog show <branch> 命令查看该分支的历史记录。


5

Reflog是记录分支末端更新时间的机制。此命令用于管理其中记录的信息。

"基本上,你在Git中执行的每个存储数据的操作,你都可以在reflog中找到它。Git非常努力地不丢失您的数据,因此,如果出现某种原因导致您认为它已经丢失了,很有可能可以使用git reflog挖掘出来。这意味着您可以将其用作安全网:您不必担心合并、变基或其他操作会破坏您的工作,因为您可以使用此命令再次找到它."

更多相关内容请参见:


5
仅仅是一条评论,说明这个历史记录只存在于执行操作的代码库中。你不会在自己的代码库中找到别人的历史记录。 - Adam Dymitruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接