web-dev-qa-db-ja.com

git cherry-pickが機能しない

マスターからコミットをチェリーピックして、現在の実稼働ブランチに入れようとしています。ただし、git cherry-pick <SHA-hash>を実行すると、次のメッセージが表示されます。

# On branch prod_20110801
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#   site/test-result/
 nothing added to commit but untracked files present (use "git add" to track)
 The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

注:リセットとリセット--hard HEAD ^を試しましたが、どちらも何も変更していないようです。

これがなぜ私にとってうまくいかないのか、私は混乱しています。

これを解決する方法についての洞察、アドバイス、またはアイデアは役に立ちます〜!

93
Jay Taylor

Gitはチェリーピックをノーオペレーションとして解決しています。そのコミットによって導入されたすべての変更は、現在のブランチのコミットによって導入されています。 (または、とにかくGitが考えることです。)適切なマージ、リベース/チェリーピック、または断片的なパッチとして、チェリーピッキングのコミットが何らかの形でまだマージされていないことを確認します。 (つかいます git show <commit-id>差分を表示します。)

125
cdhowie

私の場合、これは私を夢中にさせていました。チェリーピックにしたい特定のコミットがnotが現在のブランチにマージされたことは非常に明白でした。

誰かが1週間前にalreadyチェリーを選んだことがわかりました。 changesは特定のSHAではなく、現在のブランチに既にあり、気づいていませんでした。

チェリーピックしようとしているファイルを確認します。それらにすでに変更がある場合、別の方法でコミットのバージョンが既に選択されているか、追加されています。したがって、チェリーを再度選択する必要はありません。

8
pkamb

空のファイルを追加することにも注意してください(例:.gitkeep)ツリーへのチェリーピックは、空のコミットと見なされます。

5
Neamar

したがって、これが発生する可能性のあるさらに別の混乱する状況は次のとおりです。

git log screenshot

私は9a7b12eをチェリーピックしようとしましたが、明らかに何もありません-git log出力のその行で、4497428が私が本当に欲しかったことを教えようとしました。 (私がやったのは、コミットメッセージを探して、それを見た最初のハッシュを取得しただけです)。とにかく、ただノーオペレーションを選択するためにあなたをだまそうとすることができる別の方法があることを人々に知らせたいだけです。

1
msouth