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
まだ 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 ブランチを更新した場合、上記で説明したように、変更を元に戻して正しいブランチに移動できます。 上記の方法はすべてのブランチに適用されます。