2012-01-23 9 views
6

私は、GIT rebasesが履歴を書き換えることを知っています。つまり、コミットIDは変更されます。しかし、ブランチがリベースされたときとブランチからトレースする方法はありますか?Gitログrebases

編集:私は開発ブランチ 'A'とトピックブランチ 'B'を持っています。 「A」はチームによって共有されます。ある時点で、「A」は主流の支店に再参入しています。再ベース(およびその後のコミット)の結果、トピックブランチを更新したときに、矛盾が見られました。私は問題を解決するために話す正しい人を見つけることを試みています。

答えて

8

おそらく誰がそれをしたのかを知ることができます!リベースすると、コミットが書き換えられるので、コミッターの情報は元の作者ではなく、リベースしている人の情報になります。

この情報は、gitk(左下の差分ペイン)またはgit log --pretty=fuller(完全なものよりもいっぱい)で表示されます。ログ出力の例:

commit b8624718b97a39a04637c91ec3517c109f3f681d 
Author:  Original Author <[email protected]> 
AuthorDate: Sun Aug 8 02:15:10 2010 -0300 
Commit:  New Committer <[email protected]> 
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>を実行して、そのブランチの履歴を見るように頼むことができます。

2

Reflogは、ブランチの先端が更新されたときに記録するメカニズムです。このコマンドは、記録された情報を管理するためのコマンドです。

「基本的にはデータが格納されているのGitの内部で実行するすべてのアクションは、あなたがREFLOGの内部でそれを見つけることができます。Gitはあなたのデータを失うことはない本当に難しいしようと、何らかの理由であなたはそれを持っていると思うので、もし、 Gitのreflogを使ってそれを掘り起こすことができるのは、安全ネットとして使うことができるということです。マージやリベースなどの作業があなたの仕事を破壊することを心配するべきではありませんもう一度このコマンドを使用してください。

+3

この履歴は、アクションが実行されたレポにのみ存在するという単なるコメントです。あなたはあなたのレポに誰かの他の人物の歴史を見つけることはできません。 –

5
git reflog 

は、すべてのあなたのGitのワークフローの歴史を見ることができます。私が取り組んでいるプロジェクトでは、以下の3つのreflogエントリがあります。

151a1da [email protected]{0}: filter-branch: rewrite 
db8c822 [email protected]{1}: checkout: moving from fixes to master 
db8c822 [email protected]{2}: checkout: moving from master to fixes 

最初の列にはSHAIDが表示されます。したがって、このSHAID の標準gitコマンドを使用することができます。 git show 151a1da