1. ホーム
  2. ギット

[解決済み】"git pull" でローカルファイルを強制的に上書きするには?

2022-03-17 23:50:26

質問

のローカルファイルを強制的に上書きするにはどうすればよいですか? git pull ?

シナリオは以下の通りです。

  • あるチームメンバーが、制作中のWebサイトのテンプレートを修正しています
  • imagesディレクトリに画像を追加している(ただし、ソース管理下に追加することを忘れている)。
  • 後日、メールで画像を送ってくる。
  • ソース管理下に画像を追加し、他の変更と一緒にGitHubにプッシュしています。
  • Gitがファイルを上書きしないようにするため、GitHubから更新を引き出すことができない。

このようなエラーが出ています。

エラーが発生しました。追跡されていない作業ツリーファイル 'public/images/icon.gif' は、マージによって上書きされるでしょう。

Gitに強制的に上書きさせるにはどうしたらいいですか?その人はデザイナーです。通常、私はすべてのコンフリクトを手作業で解決しているので、サーバーには最新版があり、自分のコンピュータで更新すればいいだけです。

解決方法は?

⚠重要:ローカルに変更がある場合、その変更は失われます。を使用するかしないか --hard オプションを使用すると、プッシュされていないローカルコミットはすべて失われます。 [*]

というファイルがある場合 ではない によって追跡されているファイル(例えば、アップロードされたユーザーのコンテンツ)は影響を受けません。


まず、フェッチを実行し、すべての origin/<branch> を最新に更新しました。

git fetch --all

現在のブランチをバックアップします。

git branch backup-master

次に、2つのオプションがあります。

git reset --hard origin/master

または、他のブランチにいる場合。

git reset --hard origin/<branch_name>

説明

git fetch は、何もマージやリベースをしようとせずに、リモートから最新版をダウンロードします。

次に git reset は master ブランチを先ほど取得したものにリセットします。その --hard オプションは、作業ツリー内のすべてのファイルを origin/master


現在のローカルコミットを維持する

[*] : からブランチを作成することで、現在のローカルコミットを維持することができることは注目に値します。 master リセットする前に

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master

この後、古いコミットはすべて new-branch-to-save-current-commits .

未コミットの変更点

しかし、未コミットの変更は(ステージングされていても)失われます。必要なものは必ず隠し、コミットしてください。そのためには、以下を実行します。

git stash

そして、このコミットされていない変更を再適用することです。

git stash pop