Git: รวมสาขาระยะไกลไว้ในเครื่อง


205

git fetch --allผมเคยดึงสาขาระยะไกลผ่านทาง ฉันสามารถดูสาขาที่ฉันต้องการผสานผ่านgit branch -aเป็นรีโมท / แหล่งกำเนิด / branchname ปัญหาคือมันไม่สามารถเข้าถึงได้ ฉันไม่สามารถรวมหรือชำระเงินได้

คำตอบ:


321

คุณสามารถอ้างอิงสาขาการติดตามระยะไกลเหล่านั้น ~ (แสดงด้วยgit branch -r) ด้วยชื่อของรีโมต

คุณต้องดึงข้อมูลสาขาระยะไกล:

git fetch origin aRemoteBranch

หากคุณต้องการรวมหนึ่งในสาขาระยะไกลเหล่านั้นในสาขาท้องถิ่นของคุณ:

git checkout master
git merge origin/aRemoteBranch

หมายเหตุ 1:สำหรับ repo ขนาดใหญ่ที่มีประวัติศาสตร์อันยาวนานคุณจะต้องการเพิ่มตัวเลือกเมื่อคุณใช้--depth=1git fetch

หมายเหตุ 2:คำสั่งเหล่านี้ยังทำงานร่วมกับ repos ระยะไกลอื่น ๆ เพื่อให้คุณสามารถตั้งค่าoriginและupstreamถ้าคุณทำงานบนทางแยก


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

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

แนวคิดที่นี่คือการรวม "หนึ่งในสาขาท้องถิ่นของคุณ" (ที่นี่anotherLocalBranch) ไปยังสาขาระยะไกล ( origin/aBranch)
คุณต้องสร้างสิ่งแรก " myBranch" แทนสาขาย่อยนั่นคือgit checkout -b myBranch origin/aBranchส่วนนั้น
และจากนั้นคุณสามารถผสานanotherLocalBranchกับมัน (เพื่อmyBranch)


aLocalBranch? นั่นคือการพิมพ์ผิด? ฉันเดาว่าคุณตั้งใจจะเขียน "myBranch" อีกครั้ง?
knocte

1
@knocte No: "ถ้าคุณต้องการที่จะผสานเป็นหนึ่งในสาขาท้องถิ่นของคุณที่หนึ่งในสาขาที่ห่างไกลเหล่านั้น" ฉันกำลังผสาน " aLocalBranch" กับ " myBranch" กับ " myBranch" origin/aBranchคิดเป็นสาขาที่ห่างไกล
VonC

ขออภัยที่รบกวนคุณ @VonC ในความคิดเห็นก่อนหน้านี้ที่คุณพูดaLocalBranchไม่ใช่การพิมพ์ผิด แต่คุณอนุมัติการแก้ไขล่าสุด (2 ปีต่อมา!) ซึ่งแก้ไข "การพิมพ์ผิดที่เป็นไปได้" นี้ ฉันต้องการตรวจสอบกับคุณก่อนที่จะเลิกทำการแก้ไข
rath

1
@ รา ธ คุณถูกต้อง: ดูเหมือนว่าฉันอาจได้ตรวจสอบแล้วว่าแก้ไขอย่างเร่งรีบ ฉันแก้ไขคำตอบเพื่อชี้แจงกรณีการรวมที่สอง: คุณช่วยบอกฉันได้ไหมว่านี่ชัดเจนขึ้นหรือไม่
VonC

93

เมื่อใดก็ตามที่ฉันรวมฉันเข้าสาขาที่ฉันต้องการรวมเข้า (เช่น " git checkout branch-i-am-working-in") แล้วทำสิ่งต่อไปนี้:

git merge origin/branch-i-want-to-merge-from


2
ฉันเดาว่าคุณต้องทำgit fetch origin/branch-i-want-to-merge-fromก่อนใช่มั้ย
Hinrich

9
git fetch origin developตามด้วยgit merge origin/develop
Olivier

2
@ Olivier คุณถูกต้องนี่เป็นวิธีที่เหมาะสมที่จะทำ git merge เพียงอย่างเดียวจะไม่ทำ
Sam

1
ขอบคุณสำหรับการตั้งชื่อที่ชาญฉลาดซึ่งช่วยให้ฉันเข้าใจ
tony2tones

1
@Akira ไม่ได้git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho

24

ดึงสาขาจากระยะไกลมาจากแหล่งแรก

git fetch origin remote_branch_name

รวมสาขาระยะไกลเข้ากับสาขาท้องถิ่น

git merge origin/remote_branch_name

1
สิ่งนี้ใช้ได้กับฉันเมื่อคำตอบที่ยอมรับได้รายงานว่าไม่ใช่สิ่งที่เราสามารถผสานได้ ในกรณีของฉันฉันรวมจากผู้ใช้รายอื่นของ repo ของฉันใน GitHub
SJT

การเรียกคำสั่งแรกจำเป็นหรือไม่ 'git merge origin / remote_branch_name' อ่านจากสาขาระยะไกลไม่ใช่เฉพาะที่ ดังนั้นฉันไม่ควรสนใจสาขาท้องถิ่นจะอัพเดทหรือไม่?
Michael Freidgeim

@MichaelFreidgeim คุณต้องดึงข้อมูลก่อนเพื่อที่เก็บข้อมูลในเครื่องของคุณจะรู้สถานะของรีโมต Git pull นั้นเป็นการดึงและผสานจากรีโมตเวอร์ชันปัจจุบันของสาขาปัจจุบันของคุณ แต่ตอนนี้คุณดึงและผสานจากอันอื่น stackoverflow.com/questions/292357/…
DZet

20

บางทีคุณอาจต้องการติดตามสาขาระยะไกลด้วยสาขาในพื้นที่:

  1. สร้างสาขาท้องถิ่นใหม่: git branch new-local-branch
  2. ตั้งค่าสาขาที่สร้างขึ้นใหม่นี้เพื่อติดตามสาขาระยะไกล: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. เข้าสู่สาขานี้: git checkout new-local-branch
  4. ดึงเนื้อหาทั้งหมดของสาขาระยะไกลลงในสาขาท้องถิ่น: git pull

3

ถ้าคุณเรียกแล้วสาขาที่ห่างไกลของคุณและทำgit branch -a,
คุณได้รับสิ่งที่ต้องการ:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

หลังจากนั้นคุณสามารถใช้rep_mirror/8.0เพื่อกำหนดสาขาในพื้นที่ห่างไกลของคุณ

เคล็ดลับคือremotes/rep_mirror/8.0ไม่ทำงาน แต่rep_mirror/8.0ทำ

ดังนั้นคำสั่งเช่นเดียวgit merge -m "my msg" rep_mirror/8.0กับการผสาน

(หมายเหตุ: นี่เป็นความคิดเห็นของ @VonC คำตอบฉันใส่ไว้เป็นคำตอบอื่นเนื่องจากการบล็อกรหัสไม่เหมาะกับรูปแบบความคิดเห็น)

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