1. ホーム
  2. git

[解決済み】git stashの失敗:git stashのポップアップとマージのコンフリクトの発生

2022-04-14 02:50:08

質問

をしました。 git stash pop となり、マージの競合が発生してしまいました。ファイルシステムからファイルを削除して git checkout のように表示されますが、ファイルがまだマージされていないと判断されます。そこで、ファイルを置き換えて、以下のように git checkout を再度実行しても、同じ結果になります。そこで -f フラグを使用します。何かお手伝いいただけると幸いです。

chirag-patels-macbook-pro:haloror patelc75$ git status
app/views/layouts/_choose_patient.html.erb: needs merge
app/views/layouts/_links.html.erb: needs merge
# On branch prod-temp
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   db/schema.rb
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       unmerged:   app/views/layouts/_choose_patient.html.erb
#       unmerged:   app/views/layouts/_links.html.erb

chirag-patels-macbook-pro:haloror patelc75$ git checkout app/views/layouts/_choose_patient.html.erb
error: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
chirag-patels-macbook-pro:haloror patelc75$ git checkout -f app/views/layouts/_choose_patient.html.erb
warning: path 'app/views/layouts/_choose_patient.html.erb' is unmerged

解決方法は?

参照 man git merge ( コンフリクトの解消方法 ):

コンフリクトを見た後、あなたは2つのことをすることができます。

  • マージしないことを決定する。必要なクリーンアップは、2.を取り消すためにインデックスファイルを HEAD コミットにリセットすることと、2.と3.による作業ツリーの変更をクリーンアップすることだけです。

  • コンフリクトを解決する。Gitは作業ツリーにコンフリクトをマークします。ファイルを編集して形を整え、gitがインデックスに追加します。git commitで取引を完了させましょう。

そして、その下には TRUE MERGE (2.と3.が何を指しているのかを確認するため)。

変更の整合性をとる方法が明らかでない場合、次のようなことが起こります。

  1. HEADポインタはそのままです。

  2. MERGE_HEAD refはもう一方のブランチヘッドを指すように設定されています。

  3. きれいにマージされたパスは、インデックスファイルと作業ツリーの両方で更新されます。

  4. ...

だから:使用 git reset --hard 作業ツリーからスタッシュの変更を削除したい場合、または git reset は、インデックスだけをクリーンアップし、コンフリクトは作業ツリーに残して手作業でマージしたい場合です。

man git stash ( OPTIONS, ポップ ) を追加で読むことができます。

状態の適用が競合で失敗することがあります。この場合、stash リストから削除されません。この場合、stash リストからは削除されません。衝突を手動で解決し、その後に git stash drop を手動で呼び出す必要があります。