1

リベースについて学んだばかりで、リモートにプッシュされた後はコミットをリベースしないように強く警告されました。リポジトリを爆発させないようにしたい

コミット履歴の例

foo               W---X---Y  
                 /         \
master  A---B---C---D---E---Z---F---G
  • ここでは、master ブランチのすべてのコミットが origin/master にプッシュされている可能性があります。

  • Z完了した foo ブランチ (Y) を現在のマスター (E) とマージすることにより、git-merge によって行われる自動コミットです。

  • foo モジュールの完成以来、master はいくつかの更新 (F および G) を行いました。


リベースの使用方法は次のとおりです。

foo ブランチを更新する時が来ましたが、マスター ブランチと同期していません。

  1. git rebase masterF と G のコミットを最新の foo ブランチに含めるだけでいいですか?

  2. 私のコミット履歴が後でどのように見えるかを示すために、私の図を修正してもらえますか?

4

1 に答える 1

2
  1. 仮に、はい、そうです。gitは、すでにマスターにマージされ、状態が入っている状態にfoo早送りすることを検出するため、これを行うのは問題ありません。これは、行うのと同じことであり、非常に簡単に言えば、fooがマスターと同じこと。foomastergit merge master

    ただし、git mergeここで使用するのは論理的に意味があるためです(マージを使用して早送りを--ff-only行います。実際のマージを実行していないことを確認したい場合は、フラグもあります)。リベースを使用するのは、作業中でfooあり、そこにいくつかのコミットがあり(そしてそれをプッシュしていない)、誰かがマスターにコミットしたときです。Rebaseは、マージコミットを行わずにブランチを最新の状態にします。

  2. 可能ですが、同じ図になりますが、fooマスター、より正確にはcommitを指しGます。新しいコミットは作成されないため、参照先を移動することを除いて、リポジトリは同じまま fooです。

PS。このシナリオでリベースを使用することは以前に試したことではなかったため、これを偽のリポジトリでローカルにテストして確認しました。

于 2010-10-25T18:57:43.797 に答える