1. ホーム
  2. git

[解決済み] Git は、あるブランチを別のブランチの上にリベースします。

2023-07-29 20:05:39

質問

私の git リポジトリには Master というブランチがあります。リモートの開発者の一人が、ブランチ Branch1 ブランチを作成し、そこにたくさんのコミットをしました。私はブランチを Branch1 という新しいブランチを作成しました。 Branch2 ( git checkout -b Branch2 Branch1 ) のような Branch2 に追加された最後のコミットで Branch1 : (このように見えます)

Master---
         \
          Branch1--commit1--commit2
                                   \
                                    Branch2 (my local branch) 

Branch1 には多くの変更がありました。他の開発者は彼のコミットを破棄し、さらにいくつかのコミットを追加しました。一方、私のブランチではたくさんの変更を行いましたが、まだ何もコミットしていません。現在の構造は以下のような感じです。

  Master---
             \
             Branch1--squashed commit1,2--commit3--commit4
                                       \
                                        Branch2 (my local branch)

今度は、変更した内容をリベースして Branch1 . 私はこれをどのように行うかについて非常に混乱しています。最初のステップは、私の変更を git add .git commit -m "message" . しかし、その後でプッシュするのですか? git push origin Branch2 それとも git push origin Branch2 Branch1 ? また、ブランチのバックアップを作成することができれば、私が何かを台無しにした場合に備えて、それは素晴らしいことです。

どのように解決するのですか?

まず、現在の Branch2 :

# from Branch2
git checkout -b Branch2_backup

次にリベース Branch2Branch1 :

# from Branch2
git fetch origin           # update all tracking branches, including Branch1
git rebase origin/Branch1  # rebase on latest Branch1

リベース後は以下のようなブランチ構成になります。

master --
         \
          1 -- 2 -- 3 -- 4 -- Branch2'

上の図では、アポストロフィの付いた Branch2 のすべてのコミットがリベースされたことを示します。 Branch2 の後に コミット4は実際にはリライトです。

の履歴を書き換えたことに留意してください。 Branch2 でリモートへ強制的にプッシュする必要があります。

git push --force origin Branch2

強制プッシュは Branch2 を使っている人に迷惑がかかるので、注意が必要です。