git cherry-pick ไม่ทำงาน


111

ฉันกำลังพยายามคัดเลือกเชอร์รี่จากผู้เชี่ยวชาญและนำเข้าสู่สาขาการผลิตปัจจุบัน อย่างไรก็ตามเมื่อฉันดำเนินการ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'

หมายเหตุ: ฉันได้ลองทำการรีเซ็ตและรีเซ็ต - ฮาร์ด HEAD ^ แล้วและดูเหมือนจะไม่เปลี่ยนแปลงอะไรเลย

ฉันสับสนว่าทำไมสิ่งนี้ถึงไม่ได้ผลสำหรับฉัน

ข้อมูลเชิงลึกคำแนะนำหรือแนวคิดในการแก้ไขปัญหานี้จะเป็นประโยชน์ ~!


เรื่องนี้เกิดขึ้นกับฉันตอนที่ฉันพยายามจับผิดเชอร์รี่โดยบังเอิญ เกิดขึ้นบางครั้งเมื่อใช้ gitk
cst1992

คำตอบ:


142

Git กำลังแก้ไขการเลือกเชอร์รี่เป็น no-op - การเปลี่ยนแปลงทั้งหมดที่เกิดจากการคอมมิตนั้นได้รับการแนะนำโดยการกระทำในสาขาปัจจุบันของคุณ (หรือนั่นคือสิ่งที่ Git คิดอย่างไรก็ตาม) ตรวจสอบว่าการกระทำที่คุณกำลังเลือกเชอร์รี่ยังไม่ได้รวมเข้าด้วยกันอย่างใดอย่างหนึ่งไม่ว่าจะเป็นการผสานที่เหมาะสม rebase / cherry-pick หรือการแก้ไขทีละชิ้น (ใช้git show <commit-id>เพื่อดูความแตกต่าง)


16
ขอบคุณสำหรับคำแนะนำปรากฎว่ามีการเลือกเชอร์รี่แล้วและฉันต้องทำทั้งหมดก็แค่ส่งไปที่ github
Jay Taylor

ถูกต้องฉันไม่รู้ว่ากำลังตรวจสอบเนื้อหาของไฟล์ที่ได้รับรหัสคอมมิต ฉันค้นหารหัสการกระทำในบันทึกและไม่พบ ปรากฎว่ามันถูกรวมเข้าแล้ว
mparaz

นี่ไม่ใช่เหตุผลเดียวของปัญหาที่เป็นปัญหา ฉันมีสถานการณ์เหมือนกันทุกประการเมื่อฉันได้กระทำซึ่งจะย้อนกลับการกระทำก่อนหน้านี้และเมื่อฉันเลือกเชอร์รี่ในสาขาอื่นซึ่งประวัติไม่ได้มีการเปลี่ยนกลับการเปลี่ยนแปลงนั้น ). แน่นอนว่านั่นเป็นความผิดของฉัน แต่ในกรณีนี้คาดว่า git น่าจะล้มเหลวด้วยสถานะความขัดแย้งแทนที่จะพยายามฉลาดเกินไปซึ่งส่งผลให้ผู้ใช้สับสน
Artem Pisarenko

สิ่งนี้อาจเกิดขึ้นหากคุณยกเลิกการรวมคอมมิตและการคอมมิตที่จะเลือกเชอร์รี่จะอยู่ในสาขาที่เปลี่ยนกลับ
แมตต์

11

ในกรณีของฉันสิ่งนี้ทำให้ฉันรู้สึกแย่เพราะเห็นได้ชัดว่าการกระทำเฉพาะที่ฉันต้องการเลือกเชอร์รี่ไม่ได้รวมเข้ากับสาขาปัจจุบันของฉัน

ปรากฎว่ามีคนเลือกเชอร์รี่ไปแล้วหนึ่งสัปดาห์ก่อนหน้านี้ การเปลี่ยนแปลงแต่ไม่ใช่ SHA เฉพาะมีอยู่แล้วในสาขาปัจจุบันของฉันและฉันไม่ได้สังเกตเห็น

ตรวจสอบไฟล์ที่คุณกำลังพยายามเลือกเชอร์รี่ หากมีการเปลี่ยนแปลงอยู่แล้วเวอร์ชันของการคอมมิตได้ถูกเลือกหรือเพิ่มในลักษณะอื่นแล้ว จึงไม่จำเป็นต้องเก็บเชอร์รี่อีกครั้ง


ฉันค่อนข้างแน่ใจว่าการกระทำที่เฉพาะเจาะจงนั้นไม่เคยอยู่ในสาขาของคุณเมื่อเชอร์รี่ถูกนำเข้ามาเพราะเชอร์รี่เลือกจะเป็นแฮชใหม่ใช่ไหม? หรือว่าฉันเข้าใจผิด?
msouth

@msouth สิ่งที่ฉันนำมาจากคำตอบอื่น ๆ ในตอนแรกคือ "คอมมิตถูกรวมเข้าด้วยกันแล้ว" แต่ฉันเห็นว่ามันไม่ได้อยู่ในสาขาของฉัน คุณพูดถูกเกี่ยวกับการเลือกเชอร์รี่เป็น SHA ใหม่เสมอ
pkamb

ใช่ฉันกำลังคิดว่า "การกระทำที่เฉพาะเจาะจงตามที่แฮชระบุ" เมื่อฉันพิมพ์สิ่งนั้น ภาษาของฉันไม่ชัดเจน ฉันมักจะมองย้อนกลับไปถึงผลลัพธ์git log --graph --pretty --decorate --onelineเพื่อดูว่า SHA ที่ระบุอยู่ในสาขาของฉันหรือไม่ ดูคำตอบของฉันด้านล่างเกี่ยวกับวิธีที่คุณสามารถผสมผสานขึ้นอยู่กับการคิดว่าข้อความการกระทำนั้นบ่งบอกถึงการเปลี่ยนแปลง - มีสถานการณ์ที่ไม่เป็นเช่นนั้นและนั่นคือสิ่งที่ทำให้ฉันไปสู่คำถามนี้ในตอนแรก สมองของคนเรามีแนวโน้มที่จะสร้างทางลัดเหล่านั้นและบางครั้งก็สามารถกลับมากัดคุณได้
msouth

6

นอกจากนี้โปรดทราบว่าการเพิ่มไฟล์ว่าง (เช่น.gitkeep) ไปยังต้นไม้จะถือว่า cherry-pick เป็นการกระทำที่ว่างเปล่า


ในกรณีของฉันฉันมีการย้อนกลับคอมมิต (นั่นคือการคืนค่าคอมมิตว่างเปล่า) ก่อนที่จะลองเลือกเชอร์รี่ดังนั้นฉันเดาว่ามีอะไรว่างเปล่าน่าจะทำให้ข้อความนี้ปรากฏขึ้น
lidkxx

3

ดังนั้นนี่คือสถานการณ์ที่น่าสับสนอีกประการหนึ่งที่สามารถเกิดขึ้นได้: ฉันมีสิ่งต่อไปนี้:

ภาพหน้าจอบันทึก git

ฉันพยายามเลือกเชอร์รี่ 9a7b12e ซึ่งดูเหมือนไม่มีอะไรเลย - มันพยายามบอกฉันในบรรทัดนั้นในเอาต์พุตบันทึก git ว่า 4497428 คือสิ่งที่ฉันต้องการจริงๆ (สิ่งที่ฉันทำก็แค่มองหาข้อความคอมมิตและคว้าแฮชแรกที่ฉันเห็นมัน) อย่างไรก็ตามแค่อยากให้คนอื่นรู้ว่ามีวิธีอื่นที่คุณสามารถหลอกให้เชอร์รี่เลือกไม่ได้


10
ไม่ค่อยมีประโยชน์สำหรับคุณที่จะลงคะแนนโดยไม่มีคำอธิบาย - นี่คือการสร้างปัญหาซ้ำซากที่ฉันมีซึ่งทำให้ฉันพบคำถามนี้ในการค้นหาของฉัน หากคุณมีข้อเสนอแนะในการปรับปรุงสิ่งนี้โปรดบอกฉันในความคิดเห็นแทนที่จะลงคะแนนเฉยๆ
msouth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.