web-dev-qa-db-ja.com

Git Cherry-Pickを終了する方法は?

昨日、メインブランチに2つのコミットをチェリーピックしました。そのうちの1つはマージ競合を引き起こし、それらを解決し、コミットしてOriginにプッシュしました。今日、次のエラーが表示されたときにサーバーからプルしようとしています。

$ git pull
fatal: You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).
Please, commit your changes before you can merge.
$

Gitステータスの読み取り:

$ git status
# On branch main
# Your branch is behind 'Origin/main' by 2 commits, and can be fast-forwarded.
#
$

私は次のことを試してみました:

$ git cherry-pick --continue
usage: git cherry-pick [options] <commit-ish>
$

これを解決する方法についてのアイデアはありますか?前もって感謝します!

41
Stunner

以下で解決しました:rm .git/CHERRY_PICK_HEADこれはgit内の内部一貫性を保証するものではないが、これまでのところ私にとって問題はないため、これは危険であると認識しています...

11
Stunner

次回はgit cherry-pick --abort、それ以外の場合は多かれ少なかれ動作するはずです。

106
Christopher

git cherry-pick --continueが機能しない場合、それはgitが古すぎることを意味します。このオプションは commit 5a5d80f でgit 1.7.8(2011年12月)に導入されました

.git/sequencer/todoから最初の命令をドロップし、そこにリストされている残りのチェリーピックを実行し、以下にリストされている初期コマンドからオプション(「-s」および「-X」と考えます) 「.git/sequencer/opts」。

最近(2014)、「You have not concluded your cherry-pick」が表示されたときに使用するコマンドになります。

7
VonC

私の 2014年の以前の回答 なので、今日(2018)の適切なコマンドはgit cherry-pick --quitです。
Git 2.19(2018年第3四半期)より前では、「git cherry-pick --quit」はCHERRY_PICK_HEADを削除できませんでした。 。

commit 3e7dd99 (2018年8月16日)by NguyễnTháiNgọcDuy(pclouds を参照してください。
浜野邦夫-gitster- in コミット39e415c 、2018年8月20日)

cherry-pick:修正-CHERRY_PICK_HEADを削除しないで終了

--quit--abortであることになっていますが、HEADは復元されません。
CHERRY_PICK_HEADを残しておくと、cherry-pickがまだ進行中の他のコマンドを間違える可能性があります(例:「git commit --amend」は動作を拒否します)。 それもきれいにします

--abortの場合、CHERRY_PICK_HEADを削除するこのジョブは "git reset"にあるため、他に何もする必要はありません。しかし、確認のために--abortテストに追加のチェックを追加しましょう。

1
VonC

別のオプション:Git 2.23(2019年第3四半期)では、git cherry-pick --continueが実際に機能します!

マルチステップのチェリーピックまたは復帰の1つのステップがリセットまたはコミットされると、コマンドラインのプロンプトスクリプトが現在のステータスを認識できず、改善されました。

commit e981bf7 (2019年7月1日) Phillip Wood(phillipwood を参照してください。
浜野邦夫-gitster- in commit 8a4acc5 、2019年7月19日)

git-Promptcherry-pick/revert検出の改善

ユーザーが一連のチェリーピックの途中で競合解決をコミットまたはリセットしたり元に戻したりすると、CHERRY_PICK_HEAD/REVERT_HEADが削除されるため、これらのファイルがない場合は確認する必要があります.git/sequencer/todoチェリーピックまたはリバートが進行中かどうかを確認します。

cherry-pickまたはrevertが進行中かどうかを確認します。ユーザーが一連のピックまたはリバートの途中で 'git commit'との競合解決をコミットしたら、CHERRY_PICK_HEAD/REVERT_HEADは存在しないため、todoファイルを読み取る必要があります。

1
VonC