18

GIT のリベースによって履歴が書き換えられることはわかっています。つまり、コミット ID が変更されます。ただし、ブランチがいつ、どのブランチからリベースされたかを追跡する方法はありますか?

編集: 開発ブランチ 'A' とトピック ブランチ 'B' があります。「A」はチームによって共有されます。ある時点で、「A」はメインストリーム ブランチにリベースされました。リベース (およびその後のコミット) の結果、トピック ブランチを更新したときに不一致が見られました。問題を解決するために適切な相談相手を見つけようとしています。

4

3 に答える 3

19
git reflog

すべての git ワークフローの履歴を見ることができます。私が取り組んでいるプロジェクトでは、上位 3 つの 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-24T00:48:10.077 に答える
16

あなたはおそらく誰がそれをしたかを知ることができます!リベースすると、コミットが書き直されるため、コミッター情報は元の作成者ではなく、リベースを行っている人からのものになります。(これは著者情報とは別のものです。)

この情報は、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>、リポジトリで実行して、そのブランチの履歴を確認するように依頼してください。

于 2012-01-24T01:34:57.187 に答える
5

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

「基本的に、データが保存されている Git 内で実行するすべてのアクションは、reflog 内で見つけることができます。Git はデータを失わないように非常に懸命に努力するため、何らかの理由でデータが失われたと思われる場合は、掘り出すことができる可能性があります。 git reflog を使用します。これが意味することは、それをセーフティ ネットとして使用できるということです: このコマンドを使用して再び見つけることができるため、マージ、リベース、またはその他のアクションによって作業が破棄されることを心配する必要はありません。"

このテーマの詳細については、

于 2012-01-23T22:09:09.247 に答える