我知道GIT rebase会重写历史--也就是提交ids会改变。但是,有什么方法可以跟踪分支何时被重新定位以及从哪个分支重新定位?
编辑:我有一个开发分支'A‘和一个主题分支'B’。'A‘是团队共享的。在某种程度上,'A‘已经被一个主流分支重新定位了。作为重新基础(和后续提交)的结果,当我更新主题分支时,我看到了差异。我正在试着找出合适的人来解决问题。
发布于 2012-01-24 09:34:57
你大概可以说出是谁干的!当你改变基址时,因为提交是重写的,所以提交者的信息将来自执行重基的人,而不是原始作者。(这与作者信息是分开的。)
您可以在gitk中(在左下角的diff窗格中)或在git log --pretty=fuller的输出中看到此信息(如在more 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>,以查看该分支的历史记录。
发布于 2012-01-24 08:48:10
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
发布于 2012-01-24 06:09:09
Reflog是一种记录分支尖端更新时间的机制。此命令用于管理其中记录的信息。
“基本上,你在存储数据的Git中执行的每一个操作,你都可以在reflog中找到它。Git真的很努力地不丢失你的数据,所以如果你出于某种原因认为它丢失了,你可以用git reflog把它挖出来。这意味着你可以把它当作一个安全网:你不应该担心合并、rebase或其他操作会破坏你的工作,因为你可以使用这个命令再次找到它。”
有关此主题的更多信息,请参阅
https://stackoverflow.com/questions/8979189
复制相似问题