Git pullで次のエラーメッセージを無視するにはどうすればいいですか?
以下のファイルに対するローカルの変更は、マージによって上書きされます。
それらを上書きするためにwantを実行した場合はどうなりますか?
私はgit pull -f
のようなことを試しましたが、何もうまくいきません。
明確にするために、すべてではなく特定の変更のみを上書きしたいと思います。
私が直接の解決策を思いついた他の2つの答えの助けを借りて申し分ない:
git checkout HEAD^ file/to/overwrite
git pull
作業コピーからすべてのローカルな変更を削除したい場合は、単にそれらを隠してください:
git stash save --keep-index
あなたがもうそれらを必要としないなら、あなたは今そのスタッシュを落とすことができます:
git stash drop
ローカルの変更の特定の部分だけを上書きしたい場合は、2つの可能性があります。
上書きしたくないものはすべてコミットし、残りの部分については上記の方法を使用してください。
上書きしたい変更にはgit checkout path/to/file/to/revert
を使用してください。ファイルがgit reset HEAD path/to/file/to/revert
によってステージングされていないことを確認してください。
これは私にとってすべてのローカルの変更を上書きするために機能し、IDを必要としません。
git reset --hard
git pull
これは段階的な変更を捨てる解決策です:
git reset file/to/overwrite
git checkout file/to/overwrite
マージを実行する前に変更をコミットするか、またはそれらを隠します。
git stash save
git merge Origin/master
git stash pop
1つのファイルに対するローカルの変更を破棄したい場合は、次のようにします。
git checkout -- <file>
そうすれば、ファイルを最新バージョンで上書きすることができます。
git pull
リポジトリにmaster
から削除されたファイルがいくつか含まれているとします。
git checkout master
git fetch Origin
git reset --hard Origin/master
git checkout -b newbranch
最近の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
)などから時間を節約することができます。また上記の方が覚えやすいです。
時々、これらのどれも働かない。厄介なことに、私が思うにLFのために、うまくいくのは削除ファイル、その後プルです。私はこの解決策をお勧めしませんが、ファイルが存在しない場合、gitはあなたの変更(変更されていないかもしれません)が上書きされることをあなたに知らせることはありません。
自己責任。
この問題はfile/sにローカルに変更を加え、Gitリポジトリにも同じファイルが存在しているため、pull/pushする前にローカルの変更を隠しておく必要があることです。
単一ファイルのローカル変更を上書きするには
git reset file/to/overwrite
git checkout file/to/overwrite
すべてのローカルの変更(すべてのファイルの変更)を上書きするには
git stash
git pull
git stash pop
また、この問題はあなたがマスターブランチとマージされていないブランチにいることが原因かもしれません。
git stash save --keep-index
は私のために働きませんでした。
下記のコマンドは期待通りに動作しました。
git reset --hard
git pull
あなたがそれらを必要としないなら、それはすべてのローカルな変更を上書きします。
これを上書きファイルに使用できます
git checkout file_to_overwrite
これは私にとってライブのリモートサーバー上の変更を破棄してソース管理GitHubから引き出すのに役立ちました:
git reset --hard
git pull Origin master
これが問題を解決するための私の戦略です。
問題のあるステートメント
私たちは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は作業ディレクトリのダーティな状態、つまり変更された追跡ファイルと段階的な変更を取得し、いつでも再適用できる未完成の変更のスタックに保存します。
この問題を解決する最善の方法は次のとおりです。
git checkout -- <path/file_name>
その後、次の方法でファイルを上書きすることができます。
git pull Origin master
特定の変更を上書きしたい場合は、どの変更を忘れたいかを伝える何らかの方法が必要です。
git stash --patch
を使用して放棄したい変更を選択的に隠してから、その隠しオブジェクトをgit stash drop
で削除することもできます。その後、リモートの変更を取り込み、通常どおりにそれらをマージすることができます。
git reset --hard && git clean -df
これにより、追跡されていないファイルがリセットされ、削除されます。
運用上の変更をサーバー上で維持したい場合は、新しい構成アイテムにマージするだけです。処理方法は以下のとおりです。
git stash
git pull
git stash pop
たぶんあなたはすべての操作を実行するわけではありません。次にできることがわかります。
私はこれの特別な場合を持っていました:私はそれの上に--assume-変えられたファイルを持っていました。 git status
コマンドが変更を表示していなかったため、見つけるのは困難でした。
私はマスターから引っ張ったときにこれに遭遇しました。
私がVisual Studioを使って処理した方法。
お役に立てれば!
リポジトリ内のファイルを無視していて、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操作は成功しました。
同じエラーメッセージが実行された
:PluginUpdatevimエディタのコマンドラインからのコマンド
「マージする前に変更をコミットするか隠してください」
1. プラグインを含むフォルダを物理的に削除した
rm -rf ~/.vim/bundle/plugin-folder/
2. そしてそれをvimのコマンドラインから再インストールした。
:PluginInstall!
なぜなら、私の〜/ .vimrcには、その目的地へのプラグインをビルドするための指示が含まれていたからです。
これで適切なフォルダが作成されました。
そしてそのフォルダに新しいパッケージを入れました〜./。vim/bundle /reinstalled-plugins-folder
" ! "記号(失敗したPluginUpdateコマンドによる)が変更されました
から " + "までの記号を入力し、その後でPluginUpdateコマンドを実行しました。
Pycharmでは、Git - > Revertをしてからpullすることができます。
私は試してみました、そして引っ張る前に、あなたがコミットしていないすべてのファイルをコミットさせましょう、そしてあなたはASからそのメッセージを受け取らないでしょう。
このメッセージは、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(-)
最も簡単な解決策は次のとおりです。
git reset --hard && git pull
このエラーが行末によるものであれば、
git add
git checkout mybranch
働くでしょう。それがなぜうまくいくのか、よくわかりません。