เปลี่ยนต้นน้ำของสาขาด้วย Magit


47

เมื่อคุณกดสาขาด้วย Magit (ด้วยP P) และสาขานั้นไม่มีต้นน้ำ Magit จะถามชื่อของสาขาที่คุณต้องการผลักดัน เยี่ยมมาก

เมื่อคุณตั้งค่าอัปสตรีมสำหรับสาขาแล้ว Magit จะไม่ถามคุณอีกต่อไปถึงตำแหน่งที่คุณต้องการดัน โดยปกติแล้วจะสะดวก (คุณไม่ต้องการให้ถูกถามทุกครั้ง) แต่จะทำให้การผลักสาขาไปยังสาขาระยะไกลเป็นเรื่องยาก

มีวิธีใดที่ Magit จะถามฉันอีกครั้งเกี่ยวกับสาขาปลายทางแม้ว่าสาขาปัจจุบันมีอัพสตรีมแล้วหรือยัง?


กรณีการใช้งาน

เป็นเรื่องธรรมดาที่ฉันมีสาขาเช่นนี้:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

และฉันต้องการเปลี่ยนสาขาทั้งในและนอกสถานที่issue-30-and-34เป็น ถ้าฉันเพิ่งเปลี่ยนชื่อสาขาท้องถิ่นฉันจะเหลือสิ่งนี้:

Local:    issue-30-and-34 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

แม้ว่าผมจะลบorigin/issue-30ทำP Pบนก็จะสร้างissue-30-and-34 origin/issue-30

สิ่งที่ฉันทำคือต่อไปนี้ แต่มันรู้สึกถึงวงเวียนสำหรับสิ่งที่สามารถทำได้ในgitคำสั่งเดียว:

  1. สร้างสาขาใหม่ที่เรียกว่าissue-30-and-34 (แทนที่จะเปลี่ยนชื่อสาขาเก่า)
  2. ลบทั้งในระดับท้องถิ่นและรุ่นจากระยะไกลissue-30,
  3. push issue-30-and-34(เนื่องจากยังไม่มี upstream เลย Magit จะถามฉันว่าจะดันที่ใด)

โปรดพิจารณายอมรับคำตอบโดย @tarsius แทนของฉัน (เพื่อให้ง่ายต่อการค้นหาข้อมูลที่เกี่ยวข้อง )
Constantine

@ คอนสแตนติทำ
Malabarba

คำตอบ:


60

เริ่มต้นด้วยคุณสามารถเปลี่ยนต้นน้ำของสาขาในปัจจุบันไปยังสาขาที่ห่างไกลหรือท้องถิ่นโดยใช้v2.1 bu[REMOTE/]BRANCHRETเริ่มต้นด้วยv2.4หากมีการตั้งค่าอัปสตรีมแล้วbuจะยกเลิกการตั้งค่า กดuอีกครั้งเพื่อตั้งค่าใหม่

เริ่มต้นด้วยและถ้าต้นน้ำคือล้างคุณยังสามารถตั้งค่าต้นน้ำขณะที่ผลักดันโดยใช้v2.4 pu[REMOTE/]BRANCHRETคุณจะถูกถามโดยอัตโนมัติว่าจะใช้สาขาใดเป็นต้นน้ำ เมื่อมีการตั้งค่าอัปสตรีมpuจะผลักไปที่นั้นโดยไม่แจ้งให้คุณเปลี่ยนอัปสตรีม ดังนั้นในการเปลี่ยนอัพสตรีมคุณต้องใช้วิธีการที่อธิบายไว้ในย่อหน้าก่อนหน้า

ก่อนที่มันก็เป็นไปได้ที่จะตั้งสาขาที่ห่างไกลที่คุณกำลังผลักดันที่จะเป็นสาขาต้นน้ำใช้v2.4 p-ueREMOTE/BRANCHRETแต่ตอนนี้--set-upstreamสวิทช์ไม่สามารถใช้ได้อีกในการผลักดันป๊อปอัพโดยค่าเริ่มต้น คุณสามารถเรียกคืนได้โดยตั้งค่าmagit-push-current-set-remote-if-missingเป็นศูนย์ สิ่งนี้มีสองเอฟเฟกต์: --set-upstreamสวิตช์จะพร้อมใช้งานอีกครั้งหลังจากรีสตาร์ทครั้งถัดไปและวิธีการที่อธิบายไว้ในย่อหน้าก่อนหน้าจะไม่ทำงานอีกต่อไป


หากคุณต้องการให้คุณสมบัติทั้งสองที่อธิบายไว้ในวรรคสองและสามพร้อมกันให้ปล่อยไว้โดยmagit-push-current-set-remote-if-missingไม่ถูกแตะต้องและเพิ่มลงในไฟล์ init ของคุณ:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")

11

กด " P C-u C-u P" เพื่อให้ Magit ถามคุณว่าจะใช้สาขาระยะไกลและระยะไกลแบบใดก่อนผลักดัน

(ด้วยอาร์กิวเมนต์นำหน้าเดี่ยว (" P C-u P") Magit ถามว่าจะใช้รีโมตใด)

ฉันพบสิ่งนี้โดยการกดP C-h k Pในบัฟเฟอร์สถานะ Magit การอ่านเอกสารของmagit-pushและmagit-push-dwim(เอกสารเหล่านี้ดูเหมือนจะล้าสมัย BTW) และการทดลอง

PS: ผมใช้ magit-1.2.0-2049-ge6839e8Magit


5
คำตอบนี้ล้าสมัยไปเล็กน้อย
Szymon Wygnański

1

ดูเหมือนว่าอยู่ภายใต้ส่วนย่อย / กำหนดค่าตอนนี้:

b C p เพื่อตั้งค่า pushRemote


มีความคิดวิธีระบุระยะไกลนอกเหนือจากค่าเริ่มต้นหรือไม่
Scry

0

ข้อมูล ณ เดือนพฤศจิกายน 2559 และล่าสุดmagitนี่เป็นวิธีแก้ปัญหาบางส่วน:

P e- ช่วยให้คุณสามารถผลักดันelsewhereได้ แต่ไม่สามารถจดจำได้

ฉันไม่สามารถหาวิธีที่จะ magit ไป--set-upstreamดังนั้นฉันเพิ่งทำสิ่งนี้จาก terminal ชนิดของการโกง แต่มันทำให้ฉันได้รับปัญหานี้:

git push --set-upstream origin <branch-name>

และตอนนี้อัปสตรีมใหม่จะถูกบันทึกและฉันสามารถสร้างสิ่งต่อไปของฉัน :)


1
"ฉันหาทางไม่ได้ [... ] ถึง--set-upstream" - บางทีคุณควรลองอ่านคำตอบของ
tarsius

แน่นอนมันเป็นสิ่งที่ช่วยให้ฉันเข้าใจสิ่งนี้ เพียงแค่magitมีการเปลี่ยนแปลงเล็กน้อยตั้งแต่นั้นมาและความหวังของฉันคือการแก้ปัญหาของฉันช่วยคนไม่กี่นาทีพิเศษ
Josh.F

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