git cherry-pick tidak berfungsi

110

Saya mencoba untuk memilih komit dari master dan memasukkannya ke dalam cabang produksi saat ini. Namun, ketika saya mengeksekusi git cherry-pick <SHA-hash>, saya hanya mendapatkan pesan ini:

# 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'

Catatan: Saya sudah mencoba melakukan reset dan reset --hard HEAD ^, dan sepertinya tidak ada yang mengubah apa pun.

Saya bingung mengapa ini tidak berhasil untuk saya.

Setiap wawasan, saran, atau ide tentang cara mengatasinya akan sangat membantu ~!

Jay Taylor
sumber
Ini terjadi pada saya ketika saya secara tidak sengaja mencoba mengambil ceri pada komitmen yang salah. Terkadang terjadi saat menggunakan gitk.
cst1992

Jawaban:

141

Git menyelesaikan cherry-pick sebagai no-op - semua perubahan yang diperkenalkan oleh komit itu telah diperkenalkan oleh beberapa komit pada cabang Anda saat ini. (Atau begitulah yang dipikirkan Git.) Verifikasi bahwa komit yang Anda pilih belum digabungkan, baik sebagai gabungan yang tepat, rebase / pilih ceri, atau tambalan sedikit demi sedikit. (Gunakan git show <commit-id>untuk melihat perbedaannya.)

cdhowie.dll
sumber
16
Terima kasih atas saran Anda, ternyata cherry-pick sudah terjadi dan yang perlu saya lakukan hanyalah mendorongnya ke github.
Jay Taylor
Benar, saya tidak menyadarinya sedang memeriksa konten file yang diberi commit-id. Saya pergi mencari commit-id di log dan tidak dapat menemukannya. ternyata sudah digabung.
mparaz
Sayangnya, ini bukan satu-satunya alasan masalah tersebut. Saya mendapat situasi yang persis sama ketika saya telah komit, yang mengembalikan beberapa komit sebelumnya, dan ketika saya memilihnya di cabang lain, yang sejarahnya tidak mengubah perubahan itu (yaitu tidak memilih ceri dari komit yang dikembalikan itu ). Tentu saja itu salahku. Tapi dalam kasus ini diharapkan git gagal dengan status konflik, bukannya mencoba terlalu pintar, yang mengakibatkan pengguna bingung.
Artem Pisarenko
Ini mungkin terjadi jika Anda mengembalikan komit gabungan dan komit untuk dipilih berada di cabang yang dikembalikan.
matt
11

Dalam kasus saya, hal ini membuat saya gila, karena cukup jelas bahwa komitmen khusus yang ingin saya pilih belum digabungkan ke dalam cabang saya saat ini.

Ternyata seseorang sudah memilih komit seminggu sebelumnya. The perubahan , tetapi tidak SHA tertentu, sudah di cabang saya saat ini, dan aku tidak melihat mereka.

Periksa file yang Anda coba pilih. Jika mereka sudah memiliki perubahan, versi dari komit telah dipilih atau ditambahkan dengan cara lain. Dengan demikian tidak perlu memetik ceri lagi.

pkamb
sumber
Saya cukup yakin bahwa commit spesifik tidak pernah ada di cabang Anda saat dibawa oleh cherry pick, karena cherry pick akan menjadi hash baru, bukan? Atau apakah saya salah paham?
msouth
@msouth Apa yang awalnya saya ambil dari jawaban lain adalah "komit sudah digabungkan", tetapi saya dapat melihat bahwa itu tidak ada di cabang saya. Anda benar tentang cherry pick selalu menjadi SHA baru.
pkamb
Ya, saya sedang berpikir "komit spesifik, seperti yang diidentifikasi oleh hash", ketika saya mengetiknya. Bahasa saya tidak tepat. Saya sering melihat kembali keluaran dari git log --graph --pretty --decorate --onelineuntuk melihat apakah SHA tertentu ada di cabang saya atau tidak. Lihat jawaban saya di bawah ini tentang bagaimana Anda juga bisa bingung berdasarkan pemikiran pesan komit adalah indikasi perubahan - ada situasi di mana tidak, dan itulah yang membawa saya ke pertanyaan ini pada awalnya. Otak seseorang cenderung membuat jalan pintas itu dan mereka kadang-kadang dapat kembali untuk menggigit Anda.
msouth
6

Juga perhatikan bahwa menambahkan file kosong (misalnya .gitkeep) ke pohon dianggap oleh cherry-pick sebagai komit kosong.

Neamar
sumber
Dalam kasus saya, saya memiliki komit kembali (yang mengembalikan komit kosong itu sendiri) sebelum percobaan pilih-ceri saya, jadi saya kira apa pun yang kosong mungkin akan menyebabkan pesan ini muncul.
lidkxx
3

Jadi, inilah Situasi Membingungkan Lain di mana hal ini bisa muncul: Saya memiliki yang berikut:

tangkapan layar git log

Saya mencoba memilih 9a7b12e ceri yang tampaknya bukan apa-apa - bahkan mencoba memberi tahu saya di baris itu di keluaran log git bahwa 4497428 adalah apa yang sebenarnya saya inginkan. (Apa yang saya lakukan hanyalah mencari pesan komit dan mengambil hash pertama yang saya lihat yang memilikinya). Bagaimanapun, hanya ingin memberi tahu orang-orang bahwa ada cara lain Anda bisa tertipu untuk mencoba memilih ceri tidak.

msouth.dll
sumber
10
Tidak terlalu membantu bagi Anda untuk memberi suara negatif tanpa penjelasan - ini adalah reproduksi yang tepat dari masalah yang saya alami yang membuat saya menemukan pertanyaan ini dalam pencarian saya. Jika Anda memiliki rekomendasi untuk meningkatkan ini, tolong beri tahu saya di komentar, bukan hanya downvoting.
msouth