web-dev-qa-db-ja.com

Gitマージの競合-リモートファイルが削除され、ローカルファイルが変更されました

別のブランチからの変更をマージしましたが、リモートブランチでファイルが削除されたが、ローカルブランチで変更があったため、競合が発生しています。

ファイルを削除したいのですが、git rm path/to/fileを試しましたが、file: needs mergeと表示されます。ファイルを削除してマージをコミットする最良の方法は何ですか?

22
xylar

--forceパラメーターを使用してみてください。

git rm --force <file>

ファイルをファイルシステムに保持したい場合:

git rm --cached <file>
26
fork0

git rm path/to/fileを試しましたが、ファイルと表示されます:needs merge

Git 2.23(Q3 0219、7年後)ではそのエラーメッセージは表示されなくなります

git rm」は、混乱していたパスを実際に削除する前に、内部メッセージ「needs merge」をリークするために使用された競合するパスを解決します。
これは修正されました。

commit b2b1f61 (17 Jul 2019)by Junio C Hamano(gitster を参照してください。
(Merged by Junio C Hamano --gitster- in commit 5e9d978 、25 Jul 2019)

rm:削除による解決は警告に値するイベントではありません

パスの競合を解決して削除する場合は、「git rm」を使用するのが標準的な方法です。
ただし、その操作中、ユーザーには「needs merge」メッセージが表示されます。

$ git merge side-branch
$ edit conflicted-path-1
$ git add conflicted-path-1
$ git rm conflicted-path-2
conflicted-path-2: needs merge
rm 'conflicted-path-2'

git rm」による削除は実行されますが、初心者のユーザーは混乱を招く可能性があります。
"needs merge?それで、競合を削除する前に、競合を解決する必要があります???"

メッセージは「 update-index --refresh 」から送信されます。これは、「git rm」がどのパスがクリーンでどのパスがダーティであるかを確認するために内部的に呼び出されます。 「-f」オプションなしでインデックスに関連して変更されたパス。

どういうわけか、UIサーフェスに浸透したこのメッセージをスケルチしなかったのです。

git commit」、「git describe」などで使用されているのと同じメカニズムを使用して、メッセージをスケルチします。

4
VonC