ติดตามสาขาระยะไกลใหม่ที่สร้างบน GitHub


183

ฉันมีสาขาหลักในพื้นที่แล้วติดตามสาขาต้นแบบระยะไกลของโครงการ Github ตอนนี้ผู้ทำงานร่วมกันของฉันได้สร้างสาขาใหม่ในโครงการเดียวกันและฉันต้องการทำสิ่งต่อไปนี้:

  1. สร้างสาขาใหม่ในพื้นที่
  2. ทำให้สาขาใหม่ติดตามสาขาระยะไกลที่สร้างใหม่

ฉันจะทำอย่างไรให้ถูกต้อง?


2
git checkout - track -b <local branch> <remote> / <branch branch> ยังใช้งานได้
MLister

14
git checkout -t <remote>/<whatever>หรือเพียงแค่ ... หากมีเพียงหนึ่งสาขาการติดตามระยะไกลที่สิ้นสุดใน<whatever>คุณก็สามารถทำได้git checkout <whatever>และ git เดาสิ่งที่คุณหมายถึง
มาร์ค Longair

คำตอบ:


251
git fetch
git branch --track branch-name origin/branch-name

คำสั่งแรกทำให้แน่ใจว่าคุณมีสาขาระยะไกลในพื้นที่เก็บข้อมูลท้องถิ่น คำสั่งที่สองสร้างสาขาท้องถิ่นซึ่งติดตามสาขาระยะไกล ก็ถือว่าชื่อระยะไกลของคุณและชื่อสาขาoriginbranch-name

--track ตัวเลือกถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับสาขาระยะไกลและคุณสามารถละเว้นได้


3
เมื่อฉันทำสิ่งนี้ฉันจะได้รับคำเตือน: refname 'branch-name' ไม่ชัดเจน
Ultrasaurus

19
หากมีสาขาระยะไกลเพียงสาขาเดียวที่มีชื่อสาขานั้นคุณสามารถทำได้git checkout <branchname>และ git จะตรวจสอบโดยอัตโนมัติและตั้งค่าสาขาการติดตาม แค่อยากจะย้ำสิ่งที่ @ Mark Longair ที่กล่าวข้างต้นในความคิดเห็นนี้: stackoverflow.com/questions/11262703/...
Ryan Walls

ชื่อสาขาระยะไกลของฉันคือremotes/origin/developอะไร? ไม่ควรจะเป็นเพียงแค่origin/develop? สิ่งเหล่านี้เหมือนกันหรือไม่
アレックス

2
ฉันต้องทำgit fetch --allมิฉะนั้นจะไม่สามารถดึงสาขาใหม่ได้
mschrimpf

วิธีการทำเช่นนี้ใน Eclipse เมื่อฉันทำกับเหล่านั้นcmdคราสตรวจจับสาขาใหม่หรือไม่
Deckard

31

หากคุณไม่มีสาขาท้องถิ่นที่มีอยู่มันเป็นเรื่องง่ายเหมือน:

git fetch
git checkout <remote-branch-name>

ตัวอย่างเช่นถ้าคุณดึงข้อมูลและมีสาขาการติดตามระยะไกลใหม่ที่เรียกว่าorigin/feature/Main_Pageให้ทำสิ่งนี้:

git checkout feature/Main_Page

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

git checkout -t <remote>/<remote-branch-name>

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


1
git checkout 1.5-branch( remotes/upstream/1.5-branchอยู่ในผลลัพธ์ของgit branch -a) ผลลัพธ์ในerror: pathspec '1.5-branch' did not match any file(s) known to git.การเปลี่ยนสิ่งนี้เป็นgit checkout upstream/1.5-branchผลลัพธ์ใน HEAD เดี่ยวและไม่มีการสร้างสาขาท้องถิ่น ฉันคิดว่าคำตอบส่วนนี้ผิด นี่คือคอมไพล์ 2.4.3
Piotr Dobrogost

คำสั่งแรกใช้งานได้สำหรับฉันใน git 1.9.3 แม้กระทั่งรีโมทที่ต่างกัน เป็นไปได้ว่าพฤติกรรมนี้เปลี่ยนไป ผลลัพธ์ของคำสั่งที่สองของคุณคือสิ่งที่ฉันคาดหวัง หากไม่มี -t คุณไม่ได้ระบุว่าคุณต้องการทำสิ่งอื่นนอกเหนือจากการดูรุ่นเฉพาะนั้นบนรีโมต
kotoole

1
ฉันเห็นด้วยกับ @PiotrDobrogost ฉันเชื่อว่าคำพูดของคุณ "นี่เป็นการสร้างสาขาท้องถิ่นที่มีชื่อเดียวกัน ... " ผิดพลาด การดึงข้อมูลจะทำอย่างไร (เมื่อเรียกว่าวิธีนี้) คือการสร้างสาขาการติดตามระยะไกลสำหรับแต่ละสาขาในระยะไกล นั่นหมายถึงสาขาใน repo <remote>/<branch>ท้องถิ่นของคุณชื่อ สาขาการติดตามระยะไกลนั้นเป็นแบบอ่านอย่างเดียวซึ่งระบุว่าสาขานั้นอยู่ที่ไหนบนรีโมตเมื่อดึงข้อมูลล่าสุด การโทรcheckoutไปที่สาขาอ้างอิงทำให้คุณอยู่ในโหมด HEAD เดี่ยวเช่นเดียวกับ Piotr พูด โปรดทราบว่าการระบุสาขาระยะไกลเพื่อดึงข้อมูลหลีกเลี่ยงการสร้างสาขาการติดตามระยะไกลที่ไม่พึงประสงค์
scanny

2
ต้องมีความชัดเจนอีกครั้งหนึ่ง: git checkout feature-branchผมแนะนำใช้คำสั่ง ฉันไม่แนะนำให้ใช้คำสั่ง git checkout origin/feature-branch ซึ่งในขณะที่คุณทั้งสองได้ชี้ให้เห็นจะทำให้หัวแยกเดี่ยวที่ไม่มีประโยชน์
kotoole

ง่ายและตรงประเด็นมาก ทำงานได้ดีกับ git 2.8.3 บน cygwin
เฟลิเป้อัลวาเรซ

29

ก่อนอื่นคุณต้องดึงที่เก็บระยะไกล:

git fetch remoteName

คุณสามารถสร้างสาขาใหม่และตั้งค่าเพื่อติดตามสาขาระยะไกลที่คุณต้องการ:

git checkout -b newLocalBranch remoteName/remoteBranch

นอกจากนี้คุณยังสามารถใช้ "git branch --track" แทน "git checkout -b" ตามที่ระบุไว้สูงสุด

git branch --track newLocalBranch remoteName/remoteBranch

หากคุณcheckout -bใช้สาขาระยะไกลเป็นจุดเริ่มต้นแสดงว่าไม่จำเป็นต้องใช้--trackจริง

5
นอกจากนี้ตามที่ระบุไว้ในความคิดเห็นนี้ถ้าคุณเพิ่งทำgit checkout <branchname>และมีสาขาระยะไกลที่มีชื่อเดียวกัน (หลังจากที่คุณทำgit fetch) แล้วสาขาในท้องถิ่นจะถูกตั้งค่าโดยอัตโนมัติเพื่อติดตามรีโมต

9

เมื่อสาขาไม่มีสาขาระยะไกลคุณสามารถผลักดันสาขาท้องถิ่นของคุณโดยตรงไปยังระยะไกล

git checkout master
git push origin master

หรือเมื่อคุณมีสาขา dev

git checkout dev
git push origin dev

หรือเมื่อสาขาระยะไกลอยู่

git branch dev -t origin/dev

มีบางอย่างที่เป็นไปได้อื่น ๆ ที่จะผลักดันสาขาระยะไกล


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