คุณจะลดการเปลี่ยนแปลงของสาขาปัจจุบันบนการเปลี่ยนแปลงที่ถูกผสานได้อย่างไร


144

ตกลง. ถ้าฉันอยู่ในสาขา (พูดworking) และฉันต้องการที่จะรวมในการเปลี่ยนแปลงจากสาขาอื่น (พูดmaster) แล้วฉันจะเรียกใช้คำสั่งgit-merge masterในขณะที่อยู่ในworkingสาขาและการเปลี่ยนแปลงที่ได้รับการผสานโดยไม่ต้องลดประวัติศาสตร์เลย ถ้าฉันทำงานgit-rebase masterแล้วการเปลี่ยนแปลงในmasterนั้นจะถูก rebased เพื่อวางไว้ด้านบนของworkingสาขาของฉัน แต่ถ้าฉันต้องการที่จะรวมในการเปลี่ยนแปลงจากmasterแต่รีบูตการเปลี่ยนแปลงของฉันworkingให้อยู่ด้านบน ฉันจะทำอย่างไร มันสามารถทำได้?

ฉันสามารถทำงานgit-rebase workingบนmasterสาขาของฉันเพื่อให้การเปลี่ยนแปลงของฉันอยู่ด้านบนในmasterสาขา แต่ฉันต้องการที่จะสามารถทำเช่นนั้นในworkingสาขาของฉันและฉันไม่ทราบวิธี สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถนึกได้คือการสร้างสาขาใหม่จากmasterนั้นจึงworkingทำการเปลี่ยนแปลงของสิ่งที่อยู่ด้านบน แต่จากนั้นฉันก็จะมีสาขาใหม่แทนที่จะเปลี่ยนworkingสาขา

คำตอบ:


255

คุณมีสิ่งที่rebaseจะย้อนกลับ git rebase masterทำสิ่งที่คุณต้องการ - รับการเปลี่ยนแปลงในสาขาปัจจุบัน (ตั้งแต่ความแตกต่างจากต้นแบบ) และรีเพลย์มันไว้ด้านบนmasterแล้วตั้งค่าหัวหน้าของสาขาปัจจุบันให้เป็นหัวหน้าของประวัติศาสตร์ใหม่นั้น มันไม่เล่นซ้ำการเปลี่ยนแปลงจากmasterด้านบนของสาขาปัจจุบัน


3
@ Jonathan มันเจ๋งมาก นี่เป็นหัวข้อที่ค่อนข้างซับซ้อน โดยวิธีการที่git rebase workingจะย้ายmaster's เปลี่ยนแปลง (หลังจากจุดที่workingแยกออก) จะอยู่ด้านบนของworkingสาขา - แต่ที่ไม่ได้เป็นสิ่งที่เหมาะสมมากที่จะทำเพื่อmaster:)
ฮอบส์

66

อีกวิธีในการดูคือพิจารณาgit rebase masterเป็น:

Rebase สาขาปัจจุบันที่ด้านบนของ master

ที่นี่ ' master' คือต้นน้ำสาขาและที่อธิบายว่าทำไมในช่วง rebase ให้oursและtheirsจะกลับ


ซึ่งยังอธิบายว่าทำไม LOCAL และ REMOTE จึงถูกย้อนกลับ ขอบคุณ
AVIDeveloper

@AVID ผู้พัฒนาบน LOCAL และ REMOTE คุณยังสามารถอ่านstackoverflow.com/a/3052118/6309
VonC

5
@@ VonC: ขอบคุณ ใช่หลังจากใช้เวลาช่วงบ่ายพูดพึมพำกับตัวเอง "REMOTE คือสาขาของฉัน .. LOCAL ไม่ใช่ของฉัน" ทุกอย่างจมลงในความซื่อสัตย์ฉันอยากจะเห็นชื่อสาขา (หรือตัวย่อ SHA) แทน REMOTE / LOCAL / เรา / พวกเขา / เหมือง ความคิดของฉันเหมือนกันเกี่ยวกับgit difftoolซ้าย / ขวาที่น่ากลัว โปรดปิดหัวข้อ แต่สำหรับdifftoolฉันติด git-meld และเพลิดเพลินกับชื่อเช่น 'working-dir', 'stash @ {0}' เป็นต้น
AVIDeveloper

1
@VonC: คุณสามารถอธิบายได้อย่างไรว่าหลังจากเรา: git checkout branch_to_update git rebase masterฉันเข้าสู่คอมไพล์มาสเตอร์คอมมิชชันของสาขาท้องถิ่นแทนที่จะเป็นตรงกันข้าม
JavaSa

1
@ JavaSa มันแปลกถ้าการรีสตาร์ไม่สมบูรณ์ คุณอาจต้องถามคำถามแยกต่างหากพร้อมรายละเอียดเพิ่มเติม
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.