Git Force Pull
このチュートリアルでは、Git でリモートリポジトリから変更を強制的にプルする方法について学習します。
場合によっては、ローカルの変更を破棄して、共同開発環境のリモートリポジトリからの更新に置き換える必要があります。
git pull
コマンドを使用して、リモートリポジトリからローカルリポジトリのローカルブランチに変更をフェッチします。
git pull
コマンドは、ローカルブランチでの変更がリモートリポジトリでの変更の背後にある場合にのみ成功します。
ローカルブランチとリモートリポジトリの変更が分岐していて、ローカルの変更を破棄したい場合は、ローカルの変更を上書きするために強制的に git pull
を実行する必要があります。
これを例を挙げて詳しく説明します。
git fetch
、git reset
、git merge
を使用して、Git のリモート変更を強制的にプルする
git pull
コマンドは単一の操作ではありません。git pull
コマンドはコマンド viz を実行します。git fetch
を使用してリモートリポジトリからデータをフェッチし、次にコマンド git merge
を使用してそれらの変更をローカルリポジトリにマージします。
したがって、git pull
コマンドは、次の 2つのコマンドを実行します。
$ git fetch
$ git merge origin/$CURRENT_BRANCH
git fetch
コマンドは、リモートリポジトリから最新の変更をダウンロードします。ローカルリポジトリの merge
または rebase
は行いません。
上記の git merge
コマンドは、ローカルリポジトリのローカルブランチにまだ存在していない、$CURRENT_BRANCH
に追加されたエイリアス origin
によって指定されたリモートリポジトリからの変更をマージします。
したがって、ローカルリポジトリのローカルブランチがリモートリポジトリのブランチから分岐している場合、git pull
は失敗します。
ローカルブランチの作業ツリー内のファイルにローカルな変更を加えた可能性があります。したがって、これにより git pull
が失敗します。
リモートリポジトリの変更を優先して、ローカルの変更を破棄することを決定する場合があります。
したがって、ローカルの変更を上書きする変更を強制的にプルする必要があります。
リモート変更を強力にプルするには、次のようにする必要があります。
$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH
--hard
オプションを指定した git reset
コマンドは、ブランチをフェッチしたものにリセットします。また、追跡されたファイルへのローカルな変更はすべて破棄され、追跡されていないファイルは削除されます。
したがって、ローカルの変更は失われるため、これは注意して使用してください。
または、変更をプルする前にローカルの変更を保存することもできます。変更をプルするとともに、git stash
を使用して変更を隠しておくことができます。
次のようにできます。
$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop
したがって、git stash
を使用する場合、ローカルリポジトリのローカルブランチの git reset
を実行する必要はありません。
git stash pop
を使用して、stash
からローカルの変更を取得しました。