คำถามติดแท็ก cherry-pick

ในการจัดการการควบคุมแหล่งที่มาการเลือกดึงการเปลี่ยนแปลงเพียงครั้งเดียวจากเพียร์ไปยังเพียร์เรียกว่า "เลือกเชอร์รี่"


12
วิธีการเลือกหลายเชอร์รี่
ฉันมีสองสาขา กระทำaเป็นหัวของหนึ่งในขณะที่อื่น ๆ ที่มีb, c, d, eและด้านบนของf aฉันต้องการที่จะย้ายc, d, eและสาขาแรกโดยไม่ต้องกระทำf bใช้เชอร์รี่รับมันเป็นเรื่องง่ายที่: เช็คเอาท์สาขาแรกเชอร์รี่เลือกหนึ่งโดยหนึ่งcไปfและ rebase สาขาที่สองบนแรก แต่มีวิธีใดที่จะเลือกเชอร์รี่ทั้งหมดc- fในคำสั่งเดียว? นี่คือคำอธิบายภาพของสถานการณ์ (ขอบคุณJJD ):

11
เป็นไปได้ไหมที่เชอร์รี่จะเลือกคอมมิทจากคอมไพล์ git อื่น?
ฉันกำลังทำงานกับที่เก็บ git ที่ต้องการคอมมิทจากที่เก็บ git อื่นที่ไม่รู้อะไรเลยก่อน โดยทั่วไปแล้วฉันจะเลือกใช้เชอร์รี่โดยใช้HEAD@{x}ในการอ้างอิง แต่เนื่องจาก.gitไม่มีความรู้ใด ๆ ในรายการ reflog นี้ (ไดเรกทอรีทางกายภาพที่แตกต่างกัน) ฉันจะเลือกเชอร์รี่นี้ได้อย่างไรหรือฉันจะทำอย่างไร git-svnฉันใช้ สาขาแรกของฉันคือการใช้git-svnของtrunkของธุรกรรมซื้อคืนภาคการโค่นล้มและสาขาต่อไปคือการใช้git-svnในสาขาการโค่นล้ม
726 git  cherry-pick 

12
วิธี git-cherry-pick เปลี่ยนแปลงเฉพาะไฟล์บางไฟล์เท่านั้น?
ถ้าฉันต้องการรวมเข้ากับสาขา Git การเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์บางไฟล์ที่ถูกเปลี่ยนแปลงในคอมมิทเฉพาะที่รวมการเปลี่ยนแปลงหลายไฟล์สิ่งนี้จะเกิดขึ้นได้อย่างไร? สมมติว่าคอมมิทใช้เรียกว่าstuffมีการเปลี่ยนแปลงไฟล์A, BและC, Dแต่ฉันต้องการรวมstuffการเปลี่ยนแปลงเฉพาะไฟล์AและB. ดูเหมือนว่าเป็นงานgit cherry-pickแต่cherry-pickรู้เพียงวิธีการรวมคอมมิททั้งหมดไม่ใช่ส่วนย่อยของไฟล์
586 git  github  cherry-pick 

5
git cherry-pick กล่าวว่า“ … 38c74d เป็นการผสาน แต่ไม่มีการเลือกตัวเลือก -m”
ฉันทำการเปลี่ยนแปลงบางอย่างในสาขาหลักของฉันและต้องการนำทวนเหล่านั้น เมื่อฉันเลือกเชอร์รี่ต่อไปนี้ฉันจะติด fd9f578 เมื่อ git พูดว่า: $ git cherry-pick fd9f578 fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given. คอมไพล์กำลังพยายามบอกอะไรกับฉันและเลือกสิ่งที่ถูกต้องกับการใช้เชอร์รี่ที่นี่? สาขาหลักจะรวมถึงการเปลี่ยนแปลงไฟล์ที่ได้รับการแก้ไขในสาขาอัปสตรีมดังนั้นฉันแน่ใจว่าจะมีข้อขัดแย้งในการผสานบางอย่าง แต่สิ่งเหล่านั้นไม่ได้เลวร้ายเกินกว่าที่จะทำให้ตรงได้ ฉันรู้ว่าต้องเปลี่ยนแปลงอะไรบ้าง สิ่งเหล่านี้คือความมุ่งมั่นที่ฉันต้องการนำมาใช้ e7d4cff added some comments... 23e6d2a moved static strings... 44cc65a incorporated test ... 40b83d5 whoops delete whitspace... 24f8a50 implemented global.c... 43651c3 cleaned up ... …
518 git  merge  rebase  cherry-pick 

4
Git branching รุ่นอะไรที่เหมาะกับคุณ?
บริษัท ของเรากำลังใช้โมเดลการแยกสาขา / ปล่อย / แก้ไขอย่างง่ายและต้องการคำแนะนำเกี่ยวกับรูปแบบการแยกสาขาที่ทำงานได้ดีที่สุดสำหรับ บริษัท หรือกระบวนการพัฒนาของคุณ เวิร์กโฟลว์ / โมเดลการแยกสาขา ด้านล่างนี้เป็นคำอธิบายหลักสามประการของเรื่องนี้ที่ฉันเคยเห็น แต่พวกเขาขัดแย้งกันบางส่วนหรือไม่ไปไกลพอที่จะแยกแยะปัญหาที่ตามมาที่เราพบเจอ (ดังอธิบายด้านล่าง) ดังนั้นทีมของเราเริ่มต้นจนถึงการแก้ปัญหาที่ไม่ดีนัก คุณทำสิ่งที่ดีกว่า gitworkflows (7) หน้าคู่มือ (nvie) โมเดลการแยกสาขาของ Git ที่ประสบความสำเร็จ (reinh) เวิร์กโฟลว์ Git สำหรับทีม Agile การรวม vs การรีบูต (ประวัติเรียงตามกันพันกัน) ควรpull --rebaseหรือรอด้วยการรวมกลับไปที่การฉีดยาจนกว่างานของคุณจะเสร็จสิ้น? โดยส่วนตัวแล้วฉันโน้มตัวไปสู่การรวมตัวกันเพราะนี่เป็นการรักษาภาพประกอบที่แสดงให้เห็นว่างานเริ่มต้นและสิ้นสุดที่ใดและฉันก็ชอบmerge --no-ffจุดประสงค์นี้ด้วย มันมีข้อเสียอื่น ๆ อย่างไรก็ตาม หลายคนยังไม่ได้ตระหนักถึงคุณสมบัติที่มีประโยชน์ของการรวม - นั่นไม่ใช่การสับเปลี่ยน (การรวมสาขาหัวข้อเข้ากับต้นแบบไม่ได้หมายถึงการผสานต้นแบบเข้ากับหัวข้อหัวข้อ) ฉันกำลังมองหากระบวนการทำงานที่เป็นธรรมชาติ ข้อผิดพลาดบางครั้งเกิดขึ้นเนื่องจากขั้นตอนของเราไม่ได้จับสถานการณ์เฉพาะด้วยกฎง่าย ๆ ตัวอย่างเช่นการแก้ไขที่จำเป็นสำหรับการออกรุ่นก่อนหน้านี้แน่นอนว่าควรอิงจากดาวน์สตรีมอย่างเพียงพอเพื่อให้สามารถรวมอัปสตรีมในสาขาทั้งหมดที่จำเป็น (การใช้คำเหล่านี้ชัดเจนเพียงพอหรือไม่) อย่างไรก็ตามมันเกิดขึ้นที่การแก้ไขทำให้มันกลายเป็นต้นแบบก่อนที่นักพัฒนาจะรู้ตัวว่ามันควรจะถูกวางลงต่อไปและถ้ามันถูกผลักไปแล้ว (ยิ่งแย่กว่าการผสานหรืออะไรบางอย่างจากมัน) …

3
Git Cherry-pick และ Merge Workflow
สมมติว่าฉันเป็นผู้ดูแลธุรกรรมซื้อคืนและฉันต้องการดึงการเปลี่ยนแปลงจากผู้สนับสนุนมีเวิร์กโฟลว์ที่เป็นไปได้สองสามประการ: ฉันcherry-pickแต่ละคนกระทำจากระยะไกล (ตามลำดับ) ในกรณีนี้คอมไพล์บันทึกการกระทำที่ไม่เกี่ยวข้องกับสาขาระยะไกล ฉันmergeเป็นสาขาดึงการเปลี่ยนแปลงทั้งหมดและเพิ่ม "ข้อขัดแย้ง" ใหม่ที่กระทำ (ถ้าจำเป็น) ฉันmergeแต่ละคนกระทำจากสาขาระยะไกลเป็นรายบุคคล (ตามลำดับอีกครั้ง) อนุญาตให้บันทึกข้อขัดแย้งสำหรับแต่ละการกระทำแทนที่จะจัดกลุ่มทั้งหมดเข้าด้วยกันเป็นหนึ่งเดียว เพื่อความสมบูรณ์คุณสามารถทำrebase(เหมือนcherry-pickตัวเลือก) แต่ความเข้าใจของฉันคือสิ่งนี้อาจทำให้เกิดความสับสนสำหรับผู้มีส่วนร่วม บางทีนั่นอาจกำจัดตัวเลือกที่ 1 ในทั้งสองกรณี 2 และ 3 คอมไพล์บันทึกประวัติสาขาของคอมมิทซึ่งต่างจาก 1 สิ่งที่เป็นของข้อดีและข้อเสียของระหว่างการใช้อย่างใดอย่างหนึ่งcherry-pickหรือmergeวิธีการอธิบาย? ความเข้าใจของฉันคือวิธีที่ 2 เป็นบรรทัดฐาน แต่ฉันรู้สึกว่าการแก้ไขความมุ่งมั่นขนาดใหญ่ด้วยการผสาน "ความขัดแย้ง" เดียวไม่ใช่วิธีที่สะอาดที่สุด
302 git  merge  cherry-pick 

10
ลบการกระทำที่เฉพาะเจาะจง
ฉันทำงานกับเพื่อนในโครงการและเขาแก้ไขไฟล์จำนวนมากที่ไม่ควรได้รับการแก้ไข ยังไงก็เถอะฉันรวมงานของเขาเข้ากับฉันไม่ว่าตอนที่ฉันดึงมันหรือเมื่อฉันพยายามเลือกไฟล์เฉพาะที่ฉันต้องการ ฉันค้นหาและเล่นมาเป็นเวลานานพยายามหาวิธีลบการกระทำที่มีการแก้ไขไฟล์เหล่านั้นดูเหมือนว่าเป็นการโยนระหว่างการย้อนกลับและการรีบูตและไม่มีตัวอย่างที่ตรงไปตรงมาและ เอกสารถือว่าฉันรู้มากกว่าที่ฉันทำ ดังนั้นนี่เป็นคำถามที่ง่ายขึ้น: จากสถานการณ์สมมติต่อไปนี้ฉันจะลบการคอมมิท 2 ได้อย่างไร $ mkdir git_revert_test && cd git_revert_test $ git init Initialized empty Git repository in /Users/josh/deleteme/git_revert_test/.git/ $ echo "line 1" > myfile $ git add -A $ git commit -m "commit 1" [master (root-commit) 8230fa3] commit 1 1 files changed, 1 insertions(+), 0 …

2
คอมไพล์ผสานหลังจากเชอร์รี่เลือกทำงานอย่างไร
ลองจินตนาการว่าเรามีmasterสาขา จากนั้นเราสร้าง newbranch git checkout -b newbranch และสร้างใหม่สองคอมมิตถึงnewbranch: commit1และcommit2 จากนั้นเราเปลี่ยนเป็นต้นแบบและทำ cherry-pick git checkout master git cherry-pick hash_of_commit1 เมื่อมองgitkดูเราจะเห็นว่าcommit1และเวอร์ชั่นที่เลือกโดยเชอร์รี่นั้นมีแฮชที่แตกต่างกันดังนั้นในทางเทคนิคแล้วพวกมันต่างกันสองคอมมิชชัน ในที่สุดเราก็รวมnewbranchเป็นmaster: git merge newbranch และดูว่าทั้งสองการกระทำที่มีแฮชต่างกันถูกรวมเข้าด้วยกันโดยไม่มีปัญหาถึงแม้ว่าพวกเขาบอกเป็นนัยว่าควรใช้การเปลี่ยนแปลงเดียวกันสองครั้งดังนั้นหนึ่งในนั้นจึงควรล้มเหลว Git ทำการวิเคราะห์เนื้อหาของคอมมิชชันอย่างชาญฉลาดในขณะที่ผสานและตัดสินใจว่าไม่ควรใช้การเปลี่ยนแปลงสองครั้งหรือคอมมิชชันเหล่านี้มีการทำเครื่องหมายภายในเป็นการเชื่อมโยงเข้าด้วยกัน?

1
วิธีเลือกเชอร์รี่จาก 1 สาขาไปยังสาขาอื่น
ฉันมี 2 สาขาmasterและdev. ฉันอยู่ในdevสาขาและฉันต้องการเชอร์รี่เลือก 1 จากกระทำการmaster devดังนั้นฉันทำ $ git cherry-pick be530cec7748e037c665bd5a585e6d9ce11bc8ad Finished one cherry-pick. แต่เมื่อฉันทำgit statusและgitxฉันไม่เห็นความมุ่งมั่นของฉันbe530cec7748e037c665bd5a585e6d9ce11bc8adในประวัติศาสตร์คอมไพล์ ฉันจะเห็นความมุ่งมั่นของฉันในdevสาขาได้อย่างไร?

4
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 …

2
ผลของการใช้กราฟต์ใน Mercurial
เมื่อเร็ว ๆ นี้มีคำถามมากมายเกี่ยวกับการข้ามการเปลี่ยนแปลงเมื่อรักษาสาขาเผยแพร่ใน Mercurial ตัวอย่างเช่น: Mercurial: การเปลี่ยนแปลงเฉพาะสาขาจะกลับมาอีกหลังจากการรวมหุ่น เหตุใด Mercurial backouts ในสาขาเดียวจึงส่งผลกระทบต่อสาขาอื่น ๆ ตั้งแต่เปิดตัวใน 2.0 ฉันเคยสงสัยเกี่ยวกับการใช้graftเพื่อหลีกเลี่ยงปัญหานี้ ให้ต้นไม้แก้ไขดังนี้: A---B---C---D---E---F---G---H---I---J Eสมมติว่าเราจำเป็นต้องสร้างสาขาที่ปล่อยข้ามการเปลี่ยนแปลงชั่วร้าย hg update -r D hg graft "F::J" ให้เรา: A---B---C---D---E---F---G---H---I---J \ --F'--G'--H'--I'--J' Q1: เกิดอะไรขึ้นที่นี่? ฉันเข้าใจว่าtransplantจะมีการสร้างแพตช์จากF::Jนั้นจึงนำไปใช้Dแต่graftมีการกล่าวว่าจะใช้การผสาน 3 ทางแทนที่จะเป็นแพตช์ แล้ว ....... ทำงานอย่างไร? ทำไมถึงดีขึ้น? ให้บอกว่าตอนนี้ฉันแก้ไขEและรวมเข้ากับสาขาการเผยแพร่ของฉัน --E2----------------- / \ A---B---C---D---E---F---G---H---I---J---M1 \ \ --F'--G'--H'--I'--J'---------M2-- M1 เป็นการผสานแบบตรง ไม่มีอะไรพิเศษที่นั่น M2 …

4
เกิดข้อผิดพลาดในการผลักดันการเปลี่ยนแปลงใน GIT ชื่ออ้างอิงต้องเป็นไปตามกฎการจัดรูปแบบ git
ฉันมีข้อผิดพลาดอย่างหนึ่งในการใช้คอมไพล์บน Sourcetree ฉันได้สร้างสาขาท้องถิ่นที่เรียกว่า sprints / Mycompany_sprint_1 (เพราะฉันต้องการในหมวดหมู่) จากนั้นฉันก็เลือกเชอร์รี่หลายอันมาที่สาขานี้จากสาขาอื่น หลังจากนั้นฉันพยายามผลักดันการเปลี่ยนแปลงทั้งหมดในสาขาของฉัน แต่ฉันได้รับข้อผิดพลาดถัดไป: สาขาระยะไกล '' (Local branch = 'sprints / Mycompany_sprint-1') ไม่ถูกต้อง ชื่อการอ้างอิงต้องเป็นไปตามกฎการจัดรูปแบบ git: https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html เสร็จสิ้นโดยมีข้อผิดพลาดดูด้านบน แต่ถ้าฉันไปที่ลิงค์ฉันกำลังติดตาม (เท่าที่ฉันเห็น) กฎทั้งหมดเพราะมองที่กฎข้อแรก: พวกเขาสามารถรวม slash / สำหรับการจัดกลุ่มลำดับชั้น (ไดเรกทอรี) แต่ไม่มีองค์ประกอบที่คั่นด้วยสแลชสามารถเริ่มต้นด้วยจุด หรือจบด้วยลำดับ. ล็อค ฉันตรวจสอบว่าปัญหาอาจเป็นไปได้ว่ามีหมวดหมู่สปริงอยู่แล้ว แต่ไม่ใช่ในกรณีนี้ มีใครบอกฉันได้ไหมว่าฉันทำอะไรผิด ฉันกลัวที่ไม่เห็นข้อผิดพลาดที่นี่ ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.