web-dev-qa-db-ja.com

ローカルの変更がマージによって上書きされるというgit pullのエラーを無視するにはどうすればいいですか?

Git pullで次のエラーメッセージを無視するにはどうすればいいですか?

以下のファイルに対するローカルの変更は、マージによって上書きされます。

それらを上書きするためにwantを実行した場合はどうなりますか?

私はgit pull -fのようなことを試しましたが、何もうまくいきません。

明確にするために、すべてではなく特定の変更のみを上書きしたいと思います。

471
mae

私が直接の解決策を思いついた他の2つの答えの助けを借りて申し分ない:

git checkout HEAD^ file/to/overwrite
git pull
272
mae

作業コピーからすべてのローカルな変更を削除したい場合は、単にそれらを隠してください:

git stash save --keep-index

あなたがもうそれらを必要としないなら、あなたは今そのスタッシュを落とすことができます:

git stash drop

ローカルの変更の特定の部分だけを上書きしたい場合は、2つの可能性があります。

  1. 上書きしたくないものはすべてコミットし、残りの部分については上記の方法を使用してください。

  2. 上書きしたい変更にはgit checkout path/to/file/to/revertを使用してください。ファイルがgit reset HEAD path/to/file/to/revertによってステージングされていないことを確認してください。

356
Daniel Hilgarth

これは私にとってすべてのローカルの変更を上書きするために機能し、IDを必要としません。

git reset --hard
git pull
160
kravits88

これは段階的な変更を捨てる解決策です:

git reset file/to/overwrite
git checkout file/to/overwrite
72
Aftershock

マージを実行する前に変更をコミットするか、またはそれらを隠します。

  1. git stash save
  2. git merge Origin/master
  3. git stash pop
57
Suneel Kumar

1つのファイルに対するローカルの変更を破棄したい場合は、次のようにします。

git checkout -- <file>

そうすれば、ファイルを最新バージョンで上書きすることができます。

git pull
38
pabloasc

リポジトリにmasterから削除されたファイルがいくつか含まれているとします。

  1. git checkout master
  2. git fetch Origin
  3. git reset --hard Origin/master
  4. git checkout -b newbranch
11
Nikhil K R

最近のGitでは、pullコマンドに-r/--rebaseを追加して、フェッチ後に現在のブランチを上流のブランチの上にリベースすることができます。警告は消えるはずですが、いくつかの競合が発生して解決する必要があるというリスクがあります。


あるいは、別のブランチを強制的にチェックアウトしてから、masterに戻ることもできます。

git checkout Origin/master -f
git checkout master -f

それから、いつものようにもう一度引っ張ります。

git pull Origin master

この方法を使用すると、隠蔽(git stash)や潜在的な権限の問題、ファイルの再設定(git reset HEAD --hard)、ファイルの削除(git clean -fd)などから時間を節約することができます。また上記の方が覚えやすいです。

8
kenorb

時々、これらのどれも働かない。厄介なことに、私が思うにLFのために、うまくいくのは削除ファイル、その後プルです。私はこの解決策をお勧めしませんが、ファイルが存在しない場合、gitはあなたの変更(変更されていないかもしれません)が上書きされることをあなたに知らせることはありません。

自己責任。

7
Jeremy Holovacs

この問題はfile/sにローカルに変更を加え、Gitリポジトリにも同じファイルが存在しているため、pull/pushする前にローカルの変更を隠しておく必要があることです。

単一ファイルのローカル変更を上書きするには

git reset file/to/overwrite
git checkout file/to/overwrite

すべてのローカルの変更(すべてのファイルの変更)を上書きするには

git stash
git pull
git stash pop

また、この問題はあなたがマスターブランチとマージされていないブランチにいることが原因かもしれません。

6
BSB

git stash save --keep-indexは私のために働きませんでした。

下記のコマンドは期待通りに動作しました。

git reset --hard
git pull

あなたがそれらを必要としないなら、それはすべてのローカルな変更を上書きします。

5
Khemraj

これを上書きファイルに使用できます

git checkout file_to_overwrite
4
Deepika Patel

これは私にとってライブのリモートサーバー上の変更を破棄してソース管理GitHubから引き出すのに役立ちました:

git reset --hard
git pull Origin master
4
Gajen Sunthara

これが問題を解決するための私の戦略です。

問題のあるステートメント

私たちは10以上のファイルに変更を加える必要があります。 PULL (git pull Origin master)を試しましたが、Gitは叫びました。

エラー:以下のファイルに対するローカルの変更は、マージによって上書きされます。マージする前に、変更をコミットするか、またはそれらを隠してください。

commitを実行してからpullを実行しようとしましたが、どちらも機能しませんでした。

解決策

ファイルは "ステージングエリア" a.k.a "インデックスエリア"にあり、一部は "ヘッドエリア" a.k.a "ローカルGitディレクトリ"にあるため、実際にはdirtyステージにいました。そして私達はサーバーから変更を引き出したいと思いました。

Gitのさまざまな段階に関する情報については、このリンクをチェックしてください。GIT Stages

次の手順に従った

  • git stash(これにより作業ディレクトリがきれいになりました。変更はGitによってスタックに保存されます)。
  • git pull Origin master(サーバーから変更を引き出す)
  • git stash apply(スタックからのすべての変更を適用しました)
  • git commit -m 'message'(変更をコミットしました)
  • git Push Origin master(変更をサーバーにプッシュしました)
  • git stash drop(スタックを削除する)

いつ、なぜあなたが隠蔽を必要とするのかを理解しましょう

あなたがdirtyの状態にある場合、あなたはあなたのファイルに変更を加えていることを意味します、そしてあなたは何らかの理由で、あなたはpullまたはswitch非常に緊急の作業のための別のブランチなので、この時点では、変更をコミットするまで引っ張ったり切り替えたりすることはできません。 stashコマンドはここに手助けとしてあります。

ProGITから、第2版:

多くの場合、プロジェクトの一部に取り組んでいるときは、状況が乱雑になっているため、ブランチを少し切り替えて他の何かに取り組むことを望んでいます。問題は、後でこの時点に戻ることができるように、途中で完了した作業をコミットしたくないということです。この問題に対する答えはgit stashコマンドです。 Stashingは作業ディレクトリのダーティな状態、つまり変更された追跡ファイルと段階的な変更を取得し、いつでも再適用できる未完成の変更のスタックに保存します。

3
STK

この問題を解決する最善の方法は次のとおりです。

git checkout -- <path/file_name>

その後、次の方法でファイルを上書きすることができます。

git pull Origin master

特定の変更を上書きしたい場合は、どの変更を忘れたいかを伝える何らかの方法が必要です。

git stash --patchを使用して放棄したい変更を選択的に隠してから、その隠しオブジェクトをgit stash dropで削除することもできます。その後、リモートの変更を取り込み、通常どおりにそれらをマージすることができます。

3
Will Vousden

git reset --hard && git clean -df

これにより、追跡されていないファイルがリセットされ、削除されます。

3
Yamen Ashraf

運用上の変更をサーバー上で維持したい場合は、新しい構成アイテムにマージするだけです。処理方法は以下のとおりです。

git stash
git pull
git stash pop

たぶんあなたはすべての操作を実行するわけではありません。次にできることがわかります。

2
YanQing

私はこれの特別な場合を持っていました:私はそれの上に--assume-変えられたファイルを持っていました。 git statusコマンドが変更を表示していなかったため、見つけるのは困難でした。

2
Arkadiy

私はマスターから引っ張ったときにこれに遭遇しました。

私がVisual Studioを使って処理した方法。

  1. 最初に、私は自分のソリューションに対してUndo commitを実行しました。
  2. それから私はGit pullプロセスをしました。

お役に立てれば!

1
AJ Macapaz

リポジトリ内のファイルを無視していて、git pull upstream masterを実行したときに次のエラーが発生しました。

エラー:以下のファイルに対するローカルの変更は、マージによって上書きされます。myfile.jsマージする前に、変更をコミットするか、またはそれらを隠してください。中止する

それを解決するために私は次のようにしました

git update-index --no-assume-unchanged myfile.js

私はそれからgit statusをし、このメッセージを得ました

ブランチマスターであなたのブランチは4コミットで 'Origin/master'の後ろにあり、早送りすることができます。 (あなたのローカルブランチを更新するには "git pull"を使ってください)

コミット用にステージされていない変更:(コミットされる内容を更新するには "git add ..."を使用します)(作業ディレクトリ内の変更を破棄するには "git checkout - ..."を使用します)

変更:myfile.js

コミットに変更を加えない( "git add"や "git commit -a"を使う)

それから私はgit checkout myfile.jsに続いてgit pull upstream masterをしました。今回はgit pull操作は成功しました。

1
Dmitry

同じエラーメッセージが実行された
:PluginUpdatevimエディタのコマンドラインからのコマンド

「マージする前に変更をコミットするか隠してください」

1. プラグインを含むフォルダを物理的に削除した

rm -rf ~/.vim/bundle/plugin-folder/

2. そしてそれをvimのコマンドラインから再インストールした。
:PluginInstall!
なぜなら、私の〜/ .vimrcには、その目的地へのプラグインをビルドするための指示が含まれていたからです。

enter image description here

これで適切なフォルダが作成されました。
そしてそのフォルダに新しいパッケージを入れました〜./。vim/bundle /reinstalled-plugins-folder
""記号(失敗したPluginUpdateコマンドによる)が変更されました
から " + "までの記号を入力し、その後でPluginUpdateコマンドを実行しました。

0
stefansson

Pycharmでは、Git - > Revertをしてからpullすることができます。

0
Munichong

私は試してみました、そして引っ張る前に、あなたがコミットしていないすべてのファイルをコミットさせましょう、そしてあなたはASからそのメッセージを受け取らないでしょう。

0
Ta Quang Tu

このメッセージは、git-lfsが使用され、ファイルポインタが実際のファイルによって上書きされた場合にも発生する可能性があります。

それからあなたは使う:

git stash
git lfs migrate import
git pull

私のケースからの全出力

λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
        public/Apple-touch-icon.png

λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
        public/Apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting

λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done


λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
 public/Apple-touch-icon.png | Bin 2092 -> 130 bytes
 public/favicon.ico          | Bin 6518 -> 1150 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

を参照してください。https://github.com/git-lfs/git-lfs/issues/2839

0
c33s

最も簡単な解決策は次のとおりです。

git reset --hard && git pull
0
Jackkobec

このエラーが行末によるものであれば、

git add
git checkout mybranch

働くでしょう。それがなぜうまくいくのか、よくわかりません。

0
user60561