34

あるブランチ(「トピック」など)から別のブランチ(「マスター」と呼びます)へのコミットをチェリーピックすると、そのコミットの履歴が書き換えられ、ハッシュが変更され、事実上、新しい独立したコミットになります。

ただし、後でマスターgitに対してトピックをリベースする場合は、コミットに2回適用しないことを知っているほど賢いです。

例:

A --- B <- master
      \
       \---- C ---- D <- topic

$ git checkout master
$ git cherrypick D

A --- B --- D' <- master
      \
       \---- C ---- D <- topic

$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying 'C'

A --- B --- D' <- master
            \
             \---- C' <- topic

この魔法はどのように機能しますか?つまり。gitは、CをD'に適用する必要があるが、DをD'に適用しないことをどのように認識しますか?

4

1 に答える 1

35

答えはgit-rebaseのマニュアルページにあります:

HEADでのコミットと同じテキスト変更を導入するHEADでのコミットは省略されることに注意してください(つまり、異なるコミットメッセージまたはタイムスタンプでアップストリームですでに受け入れられているパッチはスキップされます)。

Rebaseはテキストの変更を確認し、リベース先のブランチにすでに存在する場合、そのコミットの再生を拒否します。

于 2013-01-24T22:12:30.680 に答える