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

John Wachira 2024年2月15日
Git プルのオリジン ブランチがマスター ブランチを上書きする

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

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - Git Pull