mus*_*ard 11 git git-rebase git-log
我知道GIT rebase会重写历史记录 - 即提交ID会改变.但是,有没有办法追踪分支何时被重新分支以及从哪个分支?
编辑:我有一个开发分支'A'和一个主题分支'B'.团队共享'A'.在某些时候,'A'已经与主流分支重新建立.由于重新基础(以及后续提交),当我更新主题分支时,我看到了不一致.我试图找出正确的人来解决问题.
Cas*_*bel 12
你可以告诉谁做了!当你重新定义时,由于提交被重写,提交者信息将来自进行rebase的人,而不是原始作者.(这与作者信息分开.)
您可以在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
...
Run Code Online (Sandbox Code Playgroud)
提交者名称,电子邮件和日期来自实际编写提交的操作.请注意,如果多次重写,您将只获得最新信息.
至于它被重建基础从 ......如果衍合的提交的原始版本也是你的历史,这很容易.只需搜索匹配提交的完整历史记录,例如通过提交消息的片段,或通过提交中更改的内容:
git log --all --grep='commit subject from a rebased commit'
git log --all -S'void this_function_was_added() {'
Run Code Online (Sandbox Code Playgroud)
如果你在历史的任何地方都没有原始提交,那就更难了.希望你能够通过追踪执行它的人,以及如果他们不知道,要求他们git reflog show <branch>在他们的存储库中运行,以查看该分支的历史来找到答案.
git reflog
Run Code Online (Sandbox Code Playgroud)
将允许您查看所有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
Run Code Online (Sandbox Code Playgroud)
第一列显示SHAID.所以你可以在这个SHAID上使用标准的git命令,例如git show 151a1da
Reflog是一种记录分支尖端何时更新的机制。该命令是对记录在其中的信息进行管理。
“基本上你在 Git 中执行的每一个操作都存储数据,你可以在 reflog 中找到它。Git 非常努力地不丢失你的数据,所以如果由于某种原因你认为它丢失了,你很有可能可以把它挖出来使用 git reflog。这意味着您可以将其用作安全网:您不应该担心合并、变基或其他一些操作会破坏您的工作,因为您可以使用此命令再次找到它。”
更多关于这个主题的信息