Git で強制的にプルオーバーライトを行う

Abdul Jabbar 2023年1月30日
  1. Git を強制的にプルする
  2. Git をプルするときにローカルコミットを維持する
  3. Git をプルするときにローカルの変更を維持する
Git で強制的にプルオーバーライトを行う

Git は、今日最も人気があり、要求の厳しいバージョン管理システムです。Git のユーザーインターフェースは他のバージョン管理システムと似ています。ログインしてリポジトリのクローンを作成し、コミットすることができます。

ただし、Git にはいくつかの顕著な違いがあり、他のシステムよりも複雑になっています。

Git が配布されます。すべてのリポジトリが単一の中央の場所に保存されるのではなく、すべてのユーザーがリポジトリを持っています。誰もがそれを使用するために別のリポジトリに接続する必要があります。少し面倒ですが、同じファイルを別の場所で操作できることも意味します。同じプロジェクトを複数の場所で作業でき、変更が同期されます。

ここでは、現在動作しているローカルブランチのすべての変更を強制的にプルする方法を理解します。実際、最新の変更が加えられたリモートリポジトリと同期されていない古い git リポジトリがあることが発生した可能性があります。また、リモートの最新のコミットがある場合とない場合があります。ここで、すべての最新のリポジトリをプルしたいと考えています。リモート変更であり、現在のリポジトリのローカル変更についても気にしないので、このシナリオで何をすべきか。この問題の解決策は以下のとおりです。

Git を強制的にプルする

コマンド pull という名前で、ここで git pull コマンドを使用できると思うかもしれませんが、Git で pull コマンドを使用する理想的な方法ではありません。したがって、この状況を処理する方法は 2つあります。1つは現在のローカルリポジトリを削除し、同じリポジトリのクローンを再度作成することですが、欠点は、現在のリポジトリにすでに存在する追跡されていないファイルが失われることです。

まず、次のように fetch --all を実行します。

git fetch --all

ここで、コマンド git fetch は、何もマージまたはリベースすることなく、リモートから最新のものをダウンロードします。次に、上記のようにフェッチを実行した後、master ブランチにいる場合は、次のコマンドを実行してリセットします。

git reset --hard origin/master

上記のコマンド git reset を実行すると、マスターブランチがフェッチしたものにリセットされます。他のブランチにいる場合は、次のようにブランチ名を使用します。

git reset --hard origin/<branch_name>

上記の --hard オプションは、作業ツリー内のすべてのファイルを変更して、origin/master ブランチ内のファイルと一致させます。

Git をプルするときにローカルコミットを維持する

ローカルコミットを保持したい場合は、reset コマンドを実行する前に、現在のブランチからローカルブランチを作成する必要があります。

git checkout master
git branch new-backup-branch
git fetch --all
git reset --hard origin/master

上記のコマンドは、自分が何をしているのかを正確に知っているエキスパートユーザーのみを対象としています。警告は上記のコマンドに対するものです。上記のコマンドは注意して使用し、適用する前にそれらのアクションの意味を理解していることを確認してください。

Git をプルするときにローカルの変更を維持する

reset コマンドを実行すると、コミットされていない変更と段階的な変更の両方が失われます。では、その変更をローカルリポジトリに保持するためのソリューションは何でしょうか。

これらの変更を保持したい場合は、reset コマンドを実行する前に stash コマンドを使用し、pull を実行した後、変更の上に隠された変更を pop することができます。そのために、次のコマンドを実行します。

git stash

そして、リセットとプルを完了した後、これらの隠された変更を再適用する場合は、このようにして、ローカルの変更を作業ディレクトリに再度取得します。次のコマンドを使用して、変更を元に戻します。

git stash pop
著者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

関連記事 - Git Pull