มีวิธีการจำลองgit merge
ระหว่างสองสาขาสาขาที่ทำงานปัจจุบันและต้นแบบ แต่ไม่มีการเปลี่ยนแปลงใด ๆ ?
git merge
ฉันมักจะมีความขัดแย้งเมื่อฉันจะต้องทำ มีวิธีการจำลองการผสานก่อนหรือไม่
มีวิธีการจำลองgit merge
ระหว่างสองสาขาสาขาที่ทำงานปัจจุบันและต้นแบบ แต่ไม่มีการเปลี่ยนแปลงใด ๆ ?
git merge
ฉันมักจะมีความขัดแย้งเมื่อฉันจะต้องทำ มีวิธีการจำลองการผสานก่อนหรือไม่
คำตอบ:
ฉันไม่คิดว่าจะมีวิธีการจำลองสิ่งที่จะเกิดขึ้นจนกว่าคุณจะลองผสาน อย่างไรก็ตามถ้าคุณตรวจสอบให้แน่ใจว่าผลลัพธ์ของgit status
ว่างเปล่าก่อนทำการผสานจะค่อนข้างปลอดภัยที่จะไปข้างหน้าและลอง หากคุณได้รับความขัดแย้งคุณสามารถกลับสู่สถานะที่เคยเป็นเมื่อก่อนด้วย:
git reset --merge
ตั้งแต่ git 1.7.4 คุณสามารถยกเลิกการผสานโดยทำดังนี้
git merge --abort
(เนื่องจากข้อความคอมมิชชันที่เพิ่มตัวเลือกนั้นจะอธิบายสิ่งนี้จะถูกเพิ่มเพื่อความสอดคล้องกับgit rebase --abort
เป็นต้น
--no-commit
นั้นง่ายกว่ามากในความคิดของฉัน
--no-commit
คุณจะยังคงเปลี่ยนดัชนีและแผนผังการทำงานซึ่งไม่ตรงกับ "โดยไม่มีการเปลี่ยนแปลง" :) จุดของฉันคือเมื่อมีคนถามแบบนี้ คำถามโดยทั่วไปแล้วเพราะพวกเขาไม่ทราบว่าวิธีที่ดีที่สุดในการดูว่าการผสานจะเป็นอย่างไรลองผสานรวมบ่อยครั้งเพราะพวกเขาไม่ทราบว่าการกลับไปอยู่ในสถานะที่เคยเป็นมานั้นง่ายเพียงใด หากมีปัญหาเกิดขึ้น
git merge --abort
เทียบเท่ากับgit reset --merge
เมื่อMERGE_HEAD
มีอยู่" ดังนั้นสิ่งที่จำได้ง่ายกว่าคือ :)
คุณสามารถใช้git merge --no-commit
เพื่อป้องกันไม่ให้ผสานจริง ๆ แล้วและถ้าคุณไม่ชอบวิธีการผสานทำงานเพียงรีเซ็ตเป็นหัวเดิม
หากคุณไม่ต้องการสรุปการรวมกลุ่มแม้ว่าจะเป็นการส่งต่อที่รวดเร็ว (และไม่มีข้อขัดแย้งตามคำจำกัดความ) คุณก็สามารถเพิ่มได้--no-ff
เช่นกัน
git merge --abort
มีอยู่ - บางทีคุณหมายถึงgit reset --merge
อะไร
rebase
ที่มีอยู่ไม่สำหรับ--abort
git merge
--no-ff
ไป เพื่อป้องกันไม่ให้ ff ผสานเกิดขึ้น
--no-ff
เป็นข้อบังคับที่นี่เนื่องจาก--no-commit
ไม่หยุดการเปลี่ยนแปลงที่รวดเร็ว
ถ้าฉันต้องการเปรียบเทียบการเปลี่ยนแปลงในหัวข้อของหัวข้อกับต้นแบบฉันพบว่าง่ายที่สุดและปลอดภัยที่สุดในการทำสิ่งต่อไปนี้:
git checkout master
git checkout -b trial_merge
git merge topic_branch
หลังจากเสร็จสิ้นการผสานจะเห็นการเปลี่ยนแปลงรวมจากต้นแบบได้ง่าย
git diff master
เมื่อเสร็จแล้วให้ลบสาขา Trial_merge
git checkout master
git branch -D trial_merge
ด้วยวิธีนี้สาขาหลักจะไม่เปลี่ยนแปลง
git checkout --detach
และทดสอบสิ่งที่คุณต้องการ หลังจากนั้นหากคุณต้องการเก็บการเปลี่ยนแปลงของคุณgit checkout -b new_branch
ไว้ และหากคุณต้องการละทิ้งการเปลี่ยนแปลงโปรดชำระเงินที่สาขาที่คุณต้องการ ( git checkout master
)
topic_branch
มีขนาดใหญ่ (อย่างที่เป็นไปได้ในกรณีที่คุณอยู่ที่คำถามนี้ในตอนแรก) diff master
ผลลัพธ์อาจมีขนาดใหญ่เกินไปสำหรับคุณที่จะใช้ลูกตาถ้าการผสานจะทำให้เกิดความขัดแย้ง
ฉันใช้ :
git merge --ff-only
ตามเอกสาร :
ปฏิเสธที่จะรวมและออกด้วยสถานะที่ไม่ใช่ศูนย์เว้นแต่ว่า HEAD ปัจจุบันนั้นทันสมัยอยู่แล้วหรือการผสานนั้นสามารถแก้ไขได้อย่างรวดเร็ว
มันไม่ใช่การจำลองเพราะจะมีการผสานไปข้างหน้าอย่างรวดเร็วในกรณีที่ไม่มีความขัดแย้งระหว่างสองสาขา แต่ในกรณีที่มีข้อขัดแย้งคุณจะได้รับแจ้งและจะไม่มีอะไรเกิดขึ้น
ฉันสามารถใช้งานgit merge --abort
ได้ไม่นานมานี้ อย่างไรก็ตามสิ่งนี้สามารถใช้ได้เฉพาะเมื่อมีข้อขัดแย้งในการผสาน หากคุณแน่ใจว่าคุณไม่ต้องการที่จะกระทำให้ใช้วิธีการอื่น ๆ ที่กล่าวถึงข้างต้น
git merge --abort
พวกเขากล่าวถึงทั้งหมด คุณควรพิสูจน์คำตอบของคุณในอนาคตโดยระบุผู้ที่เขียนคำตอบที่คุณอ้างอิง
ทำไมไม่เพียงสร้างสาขาใบปลิว (git checkout -b) และทำการทดสอบที่นั่น?
ฉันไม่ทราบแน่ชัดว่าเป็นกรณีของคุณแต่คำถามของคุณจำฉันได้ว่าบางครั้งฉันเริ่มต้นฟีเจอร์ฉันทำทุกวันและรวมการพัฒนาเข้าด้วยกันหลายครั้ง
ในจุดนี้ฉันสูญเสียการควบคุมไฟล์ที่แน่นอนที่ฉันเปลี่ยนไปและฉันจะรู้ได้เฉพาะเมื่อฟีเจอร์ของฉันถูกปิดและโค้ดของฉันจะพัฒนาขึ้น
ในกรณีนี้วิธีที่ดีที่จะทราบว่าการแก้ไขใดที่คุณทำ (ไม่ใช่อื่น ๆ จากการผสาน) กำลังใช้ Sourcetree
คุณต้องคลิกด้วยปุ่มขวาที่สาขาฐานและเลือกDiff Against Current
:
จากนั้น sourcetree จะแสดงการปรับเปลี่ยนทั้งหมดที่จะผสานหากคุณผสานสาขาของคุณเข้ากับสาขาพื้นฐาน
แน่นอนว่ามันจะไม่แสดงให้คุณเห็นถึงความขัดแย้ง แต่เป็นเครื่องมือที่มีประโยชน์ในการผสาน