HOWTO · Git

Git プルのオリジン ブランチがマスター ブランチを上書きする

この記事では、git pull origin branch コマンドの実行後に master ブランチに加えられた変更を元に戻す方法について説明します。

このページの内容

この記事では、git pull origin <branch> コマンドを実行した後に master ブランチに加えられた変更を元に戻す方法について説明します。 ローカル リポジトリとリモート リポジトリに master ブランチと feature ブランチがあるとします。

リモートの feature ブランチからローカル リポジトリに変更をプルしますが、ローカルの master ブランチでチェックアウトされていることに注意してください。

master ブランチに加えられた変更を元に戻し、feature ブランチに変更をプルするにはどうすればよいでしょうか?

Git Pull Origin <Branch> がマスター ブランチを上書きする

概念を理解するために、上記のシナリオを再現してみましょう。

リモートの feature ブランチに変更があり、ローカル リポジトリには存在しないと仮定すると、以下に示すように git pull コマンドを実行して、変更をローカル リポジトリに組み込みます。

$ git pull origin feature

git pull origin 機能

まだ master ブランチでチェックアウトされていることに注意してください。ただし、理想的には、リモートの feature ブランチからローカルの feature ブランチに変更を反映させたいと考えています。 上記のアクションは、リモート ブランチからローカル master ブランチへのすべてのコミットを停止し、マージ コミットを作成することに注意してください。

master ブランチを以前の状態に戻し、ローカルの feature ブランチに変更を組み込むにはどうすればよいでしょうか?

master ブランチを元に戻すことから始めます。 この時点で、git reset --hard コマンドを使用します。

このコマンドを使用して、master ブランチを 2つの方法でリセットできます。

親コミットで git reset --hard コマンドを使用できます。 親コミットは、プルの結果であるマージ コミットの前に存在していたコミットです。

git log --oneline コマンドを実行し、親コミットの SHA-1 を書き留めます。 リモート ブランチから導入されたコミットを覚えておいてください。

master ブランチをリセットするには、以下のコマンドを実行します。

$ git reset --hard 11bd00c

これにより、プル前の master ブランチが以前の状態にリセットされます。 または、HEAD リファレンスを使用することもできます。

この場合、以下を実行します。

$ git reset --hard HEAD~1

特にプルが複数のコミットを導入する場合、コミットを使用すると混乱する可能性があるため、上記のコマンドは最も安全なオプションです。 これで、ローカルの feature ブランチに進むことができます。

$ git checkout feature

git pull コマンドは、git fetch コマンドと git merge FETCH_HEAD コマンドを組み合わせたものです。 これは、リモートの feature ブランチからの変更が既にあることを意味しますが、それらはまだ feature ブランチにマージされていません。

git pull origin feature コマンドを再度実行する必要はありません。 代わりに、以下に示すように、変更をマージできます。

$ git merge FETCH_HEAD

これにより、ローカルの feature ブランチがリモートの feature ブランチと一致するように更新されます。

結論として、git pull origin <branch> コマンドが誤って master ブランチを更新した場合、上記で説明したように、変更を元に戻して正しいブランチに移動できます。 上記の方法はすべてのブランチに適用されます。