Git プルのオリジン ブランチがマスター ブランチを上書きする
この記事では、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
ブランチを更新した場合、上記で説明したように、変更を元に戻して正しいブランチに移動できます。 上記の方法はすべてのブランチに適用されます。
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