我知道GIT rebases将重写历史记录,即提交ID将更改。然而,有什么方法可以追踪分支何时重新建立基础以及从哪个分支重新建立基础吗?
编辑:我有一个开发分支"a"和一个主题分支"B"A"由团队共享。在某种程度上,"A"已经被一个主流分支所取代。由于重新构建(以及随后的提交),当我更新主题分支时,我看到了差异。我正在努力找到合适的人来解决问题。
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
你可能知道是谁干的!当您重新创建数据库时,由于提交被重写,提交者信息将来自执行重新创建数据库的人,而不是原始作者。(这与作者信息是分开的。)
您可以在gitk
中(在左下角的diff窗格中)或在git log --pretty=fuller
的输出中(在full比full中)看到这些信息。日志输出示例:
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>
,以查看该分支的历史记录。
回流是一种记录分支尖端何时更新的机制。此命令用于管理记录在其中的信息。
"基本上,你在存储数据的Git中执行的每一个操作,都可以在reflog中找到。Git非常努力地不丢失你的数据,所以如果出于某种原因,你认为它丢失了,你很可能可以使用Git reflog将其挖掘出来。这意味着你可以将其用作一个安全网:你不应该担心合并、重基或其他操作会破坏你的工作,因为使用此命令可以再次找到它。"
中有关此主题的更多信息
- 这篇GitReady文章
- 这个StackOverflow问题
- 官方Gitreflog文档