Gitプルで次のエラーメッセージを無視するにはどうすればよいですか?
次のファイルへのローカル変更は、マージによって上書きされます
それらを上書きしたい場合はどうなりますか?
のようなことを試しましgit pull -f
たが、何も機能しません。
明確にするために、すべてではなく、特定の変更のみを上書きしたいと思います。
gitによって追跡されていないファイルを含むすべてのローカル変更を作業コピーから削除する場合は、単にそれらを隠しておきます。
git stash push --include-untracked
それらがもう必要ない場合は、その隠し場所をドロップできます。
git stash drop
すでにステージングした変更を隠したくない場合は(たとえば、を使用しgit add
て)、オプションを追加します--keep-index
。ただし、これらの段階的な変更が上流の変更と衝突した場合でも、これによりマージが防止されることに注意してください。
ローカル変更の特定の部分のみを上書きする場合は、次の2つの可能性があります。
上書きしたくないものはすべてコミットし、残りは上記の方法を使用します。
git checkout path/to/file/to/revert
上書きしたい変更に使用します。ファイルがを介してステージングされていないことを確認してくださいgit reset HEAD path/to/file/to/revert
。
他の2つの答えの助けを借りて、私は直接的な解決策を考え出しました。
git checkout HEAD^ file/to/overwrite
git pull
これは、すべてのローカル変更をオーバーライドするために機能し、IDを必要としません。
git reset --hard
git pull
ここに非常に多くの答えがあるので、さらに別のものを追加するのは嫌ですが、上記のすべては必要以上に不格好です。Gitが混乱しているようで、変更されていないファイルを変更したと言っているので、これを常に行う必要があります(変更されていないため元に戻すことはできませんが、変更されていると思われるためプルできません)私がこれまでに見つけた最速は次のとおりです。
git stash
git stash drop
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
git pull --rebase --autostash
-r, --rebase[=false|true|merges|preserve|interactive] When true, rebase the current branch on top of the upstream branch after fetching. If there is a remote-tracking branch corresponding to the upstream
--autostash, --no-autostash Before starting rebase, stash local modifications away if needed, and apply the stash entry when done
なぜこれがまだ答えられていないのかわかりませんが、ご覧のとおり、解決策は簡単です。ここでのすべての回答は同じことを示唆しています。ローカルの変更を削除/保存してアップストリームに適用してから、(もしそうならsave
)ローカルの変更を一番上に適用します。
git pull --rebase --autostash
ステップバイステップとは何ですか:
1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory
私の場合(おそらくあなたも):
ローカルで変更があります(作業ディレクトリでの変更):
リモート変更をプルしようとすると、エラーが発生します。
この変更は、ローカルの変更と交差しません。
したがって、pull --rebase --autostash
ローカルの変更を保存して問題なく自動的に適用すると、
リポジトリに削除されたファイルがいくつか含まれている場合master
:
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
時々、これらのどれも機能しません。厄介なことに、私が思うLFのせいで、うまくいくのはファイルを削除してからプルすることです。この解決策をお勧めするわけではありませんが、ファイルが存在しない場合、gitは変更(変更でさえない場合もあります)が上書きされることを無駄に通知せず、続行できます。
自己責任。
git stash save --keep-index
私のために働いていませんでした。
以下のコマンドは期待どおりに機能しました。
git reset --hard
git pull
必要がない場合は、すべてのローカル変更を上書きします。
最近のGitでは、-r
/ --rebase
onpull
コマンドを追加して、フェッチ後に現在のブランチをアップストリームブランチの上にリベースできます。警告は消えるはずですが、解決する必要のあるいくつかの競合が発生するリスクがあります。
または、別のブランチを強制的にチェックアウトしてから、master
もう一度戻ることができます。例:
git checkout origin/master -f
git checkout master -f
次に、いつものようにもう一度引っ張ります。
git pull origin master
この方法を使用すると、隠し場所(git stash
)や潜在的な権限の問題、ファイルのリセット(git reset HEAD --hard
)、ファイルの削除( )などから時間を節約できますgit clean -fd
。また、上記のことを覚えやすくなります。
これを試して
git fetch --all
git reset --hard origin/master
git pull origin master
強制的に引っ張るのは私にとっての仕事です
これが問題を解決するための私の戦略です。
問題文
10個以上のファイルに変更を加える必要があります。試しPULL (git pull origin master)
ましたが、Gitは次のように叫びました。
エラー:次のファイルへのローカル変更はマージによって上書きされます:マージする前に、変更をコミットするか、それらを隠してください。
実行してから実行しようとしましcommit
たpull
が、どちらも機能しませんでした。
解決
ファイルは「ステージングエリア」(別名「インデックスエリア」)にあり、一部は「ヘッドエリア」(別名「ローカルGitディレクトリ」)にあったため、実際にはダーティステージにありました。そして、サーバーから変更をプルしたかったのです。
明確な方法でGitのさまざまなステージに関する情報については、このリンクを確認してください:GITステージ
次の手順に従いました
git stash
(これにより、作業ディレクトリがクリーンになりました。変更はGitによってスタックに保存されます)。git pull origin master
(サーバーから変更をプルします)git stash apply
(スタックからのすべての変更を適用しました)git commit -m 'message'
(変更をコミットしました)git push origin master
(サーバーに変更をプッシュしました)git stash drop
(スタックをドロップします)いつ、なぜ隠しておく必要があるのかを理解しましょう
ダーティ状態にある場合は、ファイルに変更を加えていることを意味します。その後、何らかの理由で、非常に緊急の作業のために別のブランチにプルまたは切り替える必要があるため、この時点ではプルまたは変更をコミットするまで切り替えます。stash
コマンドは助けの手としてここにあります。
本ProGIT、第2版から:
多くの場合、プロジェクトの一部に取り組んでいるとき、物事は厄介な状態にあり、他の何かに取り組むために少しの間ブランチを切り替えたいと思うでしょう。問題は、後でこのポイントに戻ることができるように、半分完了した作業のコミットを実行したくないということです。この問題に対する答えは、gitstashコマンドです。スタッシングは、作業ディレクトリのダーティな状態(つまり、変更された追跡ファイルとステージングされた変更)を取得し、いつでも再適用できる未完了の変更のスタックに保存します。
この問題は、ファイルにローカルで変更を加え、Gitリポジトリに変更を加えたものと同じファイルが存在するためです。したがって、プル/プッシュする前に、ローカルの変更を隠しておく必要があります。
単一ファイルのローカル変更を上書きするには:
git reset file/to/overwrite
git checkout file/to/overwrite
すべてのローカル変更(すべてのファイルの変更)を上書きするには:
git stash
git pull
git stash pop
また、この問題は、マスターブランチとマージされていないブランチを使用していることが原因である可能性があります。
git reset --hard && git clean -df
注意:これにより、追跡されていないファイルがリセットおよび削除されます。
これは、ライブリモートサーバー上の変更を破棄し、ソース管理GitHubからプルするために機能しました。
git reset --hard
git pull origin master
これをファイルの上書きに使用できます
git checkout file_to_overwrite
この問題を解決する最良の方法は次のとおりです。
git checkout -- <path/file_name>
その後、次の方法でファイルを上書きできます。
git pull origin master
サーバー上で本番環境の変更を保持する場合は、新しい構成アイテムにマージするだけです。処理方法は以下のとおりです。
git stash
git pull
git stash pop
たぶん、すべての操作を実行するわけではありません。次に何ができるかを知ることができます。
特定の変更を上書きしたい場合は、どの変更を忘れたいかを伝える方法が必要です。
使用を中止する変更を選択的に隠してgit stash --patch
から、その隠しを。で削除してみてくださいgit stash drop
。次に、リモートの変更をプルして、通常どおりにマージできます。
最も簡単な解決策は次のとおりです。
git reset --hard && git pull
エラー「次のファイルへのローカル変更はマージによって上書きされます」は、まだコミットされていないローカルリポジトリにいくつかの変更があるために発生します。したがって、リモートリポジトリからプルする前に、ローカルリポジトリで変更をコミットするだけです。
リモートリポジトリにいくつかのブランチxyzがあり、そのリモートリポジトリxyzブランチをローカルリポジトリxyzブランチにマージ(コピー)したいとします。
{
git checkout xyz //check out to the respective branch in local repo
git commit -m "commiting message" //commit changes if any, in local repo branch xyz
git pull //it pulls remote xyz branch into local xyz branch
}
私にとってこれはうまくいきました:-
git clean -f
。git pull
私はこれの特別なケースを持っていました:私はそれに--assume-unchangedが付いているファイルを持っていました。git status
コマンドに変更が表示されなかったため、見つけるのが困難でした
リポジトリ内のファイルを無視していましたが、無視するとgit pull upstream master
次のエラーが発生しました。
エラー:次のファイルへのローカル変更は、マージによって上書きされます:myfile.jsマージする前に、変更をコミットするか、それらを隠してください。中絶
それを解決するために私は次のことをしました
git update-index --no-assume-unchanged myfile.js
それから私git status
はこのメッセージを受け取りました
ブランチマスターの場合ブランチは「origin/master」より4コミット遅れており、早送りできます。(「gitpull」を使用してローカルブランチを更新します)
コミット用にステージングされていない変更:(コミットされる内容を更新するには「gitadd...」を使用)(作業ディレクトリの変更を破棄するには「gitcheckout --...」を使用)
変更:myfile.js
コミットに変更は追加されません(「gitadd」および/または「gitcommit-a」を使用)
それから私はgit checkout myfile.js
続いたgit pull upstream master
。今回はgitpull操作が成功しました。
マスターから引っ張っているときにこれに遭遇しました。
VisualStudioを使用した私がそれを処理した方法。
お役に立てれば!
私は試しましたが、プルする前に、コミットしていないすべてのファイルをコミットします。そうしないと、ASからそのメッセージを受信できなくなります。
私はgitを初めて使用しますが、私のソリューションが良いアイデアかどうかはわかりません。
私はすべての答えをテストしましたが、どれもうまくいきませんでした!
しかし、私は別の解決策を見つけました:
1. Backup both of local and repository versions of the file.
2. Delete the file from repository.
3. git add .
4. git commit
5. git push
お役に立てれば。
私の解決策はdelete
、IDEの外部からのファイルが上書きされることpull
でした。
(追跡されていないデータをいつでもバックアップして手動でマージできます)
あなたのブランチがxxコミットによって'origin/ dev'の後ろにあるため、早送りすることができます。次のコマンドを試してください。
git checkout .
git pullenter code here
それがあなたの問題を解決することを願っています。
このエラーが行末が原因である場合、
git add
git checkout mybranch
動作します。なぜそれが機能するのかよくわかりません。
Pycharmの場合、Git->Revertを実行してからプルすることができます。
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(-)
同じエラーメッセージが表示されましたvimeditorsコマンドラインから
:PluginUpdateコマンドを実行しました
「マージする前に、変更をコミットするか、隠してください」
1.プラグインを含むフォルダを物理的に削除しました
rm -rf ~/.vim/bundle/plugin-folder/
2.そしてvimコマンドラインから再インストールしました
:PluginInstall!
私の〜/ .vimrcには、その宛先へのプラグインをビルドするための指示が含まれていたためです。
これにより、適切なフォルダーが作成され、
そのフォルダーに新しいパッケージが追加されました〜./.vim/bundle/ reinstalled -plugins-folder
「!」記号(PluginUpdateコマンドが失敗したため)が
「+」記号に変更され、その後PluginUpdateコマンドを実行しました。
上書きしてローカルの変更を失っても問題ないファイルを確認してから
git checkout --ours ${filePath}
git merge upstream/master
ローカルの変更をコミットし、commit-aをマージするだけです。