2011-02-24 13 views
4

はあなたが現在のブランチとしてCで、以下のリビジョングラフがあるとします。なぜgit rebase - on a b、git rebase --onto bはオリジナルとは異なるSHA1を作成するのですか?

c a 
\/
    b 

git rebase --onto a bは、次のように作成されます。

c 
/
    a 
/
b 

git rebase --onto b aにグラフを返します。

c a 
\/
    b 

ただし、cの新しいSHA1は、両方の再編成の前にcの古いSHA1とは異なります。これはなぜですか?

答えて

7

コミットのSHA1は、メタデータを含むコミットのすべてに依存します。特に、コミットタイムスタンプに依存します。 2回リベースされたコミットには新しいタイムスタンプがあるため、新しいSHA1があります。

(実際にコミットが記録されたときは、最初に書き込まれたときの「著者日付」と、実際のコミットが記録されたときの「コミッタ日付」があることに注意してください。 gitkのコミットを見てください。

+0

興味深いです。私が混乱していたのは、リベースが実行されている新しいベースを過ぎて追加のコミットがなかったときにSHA1を変更していないということでした。新しい基盤を超えて余分な仕事をしているのであれば、新しいコミットの作成が必要になり、新しいタイムスタンプが必要になるでしょう。 – jonderry

+0

@jonderry:私はrebaseはそれが必要ない場合は何もしない知的であると信じています。 – Cascabel

+1

私はタイムスタンプを歴史*のように指摘しません。コミットには親があり、それはハッシュに含まれています。親が変更された場合、コミットは変更されます。親が変更されず、コミットに関するその他の変更がない場合、必ずしも何もする必要はありません。 – Dustin

関連する問題