ฉันจะตรวจสอบสาขา Git ระยะไกลได้อย่างไร


6711

ใครบางคนผลักสาขาที่เรียกว่าtestกับgit push origin testไปเป็นที่เก็บที่ใช้ร่วมกัน git branch -rฉันสามารถดูสาขาที่มี

ตอนนี้ฉันพยายามตรวจสอบtestสาขาระยะไกล

ฉันได้พยายาม:

  • git checkout test ซึ่งไม่ทำอะไรเลย

  • git checkout origin/test* (no branch)จะช่วยให้ ซึ่งกำลังสับสน ฉันจะอยู่ใน "ไม่มีสาขา" ได้อย่างไร

ฉันจะตรวจสอบสาขา Git ระยะไกลได้อย่างไร


9
@inger แต่ไม่รวมถึงความเป็นไปได้ในการเปลี่ยนชื่อสาขาท้องถิ่นใหม่ (หากคุณต้องการ - ตั้งค่าอัป
สตรีม

15
ฉันคิดว่ากระทู้นี้ไม่ช่วยเหลือ ดูเหมือนว่าจะไม่มีอะไรทำงานคำถามต้นฉบับดูเหมือนจะหายไปในคำตอบมากมาย ฉันได้อ่านทุกคำพยายามทุกอย่างด้านล่างและไม่รู้ว่าจะทำอย่างไรในสิ่งที่ OP ต้องการทำ
Tony Ennis

6
คำสั่ง Git นั้นไม่ง่ายเลยที่จะเริ่มต้นด้วยเพิ่มการเปลี่ยนแปลงที่นำมาใช้กับมิกซ์ล่าสุดและคุณมีหน้านี้ ...
Christophe Roussy

14
ฉันรู้สึกเหมือนฉันกินยาบ้า ฉันกำลังพยายามที่จะชำระเงินสาขาจากupstreamไม่เพียงoriginและคำตอบที่แนะนำไม่ได้ทำอะไรที่เป็นประโยชน์จากระยะไกล (ตั้งใจเล่นสำนวน) แก้ไข - ขอโทษด้วยคำแนะนำมากมายที่อยู่ในคำตอบ 2 อันดับแรกนั้นไร้ประโยชน์ อันที่สาม ( git branch test origin/test) คือสิ่งที่ใช้ได้ผล ดีใจสุด ๆ ที่ 2 มีคะแนนโหวต 20 เท่า ...
dwanderson

4
บางทีคุณอาจมีไฟล์ชื่อ 'ทดสอบ' ในแผนผังการทำงานของคุณดูstackoverflow.com/a/45006389/792416เพื่อดูรายละเอียด
โอลด์แมน

คำตอบ:


9151

ปรับปรุง

คำตอบของจากุบช่วยได้มากขึ้นในเรื่องนี้ ด้วย Git เวอร์ชั่น .6 1.6.6 ด้วยรีโมทเพียงรีโมทเดียวคุณสามารถทำได้:

git fetch
git checkout test

ในฐานะที่เป็นผู้ใช้ masukomi ชี้ให้เห็นในความคิดเห็นgit checkout testจะไม่ทำงานในคอมไพล์ที่ทันสมัยถ้าคุณมีหลายรีโมท ในกรณีนี้ให้ใช้

git checkout -b test <name of remote>/test

หรือชวเลข

git checkout -t <name of remote>/test

คำตอบเก่า

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

ในการดึงสาขาคุณต้อง:

git fetch origin

การดำเนินการนี้จะดึงข้อมูลสาขาระยะไกลทั้งหมดสำหรับคุณ คุณสามารถดูสาขาที่มีการชำระเงินด้วย:

git branch -v -a

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

git checkout -b test origin/test

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

139
หากเป็นสาขาระยะไกลใหม่คุณอาจต้องgit fetchดำเนินการก่อนเพื่อให้ทราบ gitorigin/test
Neil Sarkar

56
... และคุณจะทำสิ่งนี้กับgit fetch origin test
Andrew

22
ข้อผิดพลาด: "เช็คเอาต์คอมไพล์: การอัพเดทพา ธ ไม่สามารถใช้งานได้กับการสลับแบรนช์คุณตั้งใจจะเช็คเอาต์origin/testซึ่งไม่สามารถแก้ไขได้ตามที่ได้กระทำไว้"
Xeoncross

85
git checkout testจะไม่ทำงานในคอมไพล์ที่ทันสมัยถ้าคุณมีรีโมทหลายที่มีชื่อสาขาเดียวกัน ไม่ทราบว่าจะใช้อันไหน
masukomi

1256

Sidenote:ด้วย Git ที่ทันสมัย ​​(> = 1.6.6 ) คุณสามารถใช้งานได้เพียง

git checkout test

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


* (no branch)ในgit branchวิธีการส่งออกว่าคุณอยู่ในสาขาที่ไม่มีชื่อในที่เรียกว่า "หัวแฝด" ของรัฐ (จุด HEAD โดยตรงกับการกระทำและไม่ได้เป็นสัญลักษณ์การอ้างอิงไปยังสาขาบางท้องถิ่น) หากคุณทำคอมมิชชันในสาขาที่ไม่มีชื่อนี้คุณสามารถสร้างสาขาโลคัลจากการคอมมิทปัจจุบัน:

git checkout -b test HEAD

** แก้ไข (โดยผู้เขียนไม่ใช่ผู้แก้ไข) **

ฉันพบความคิดเห็นที่ฝังอยู่ด้านล่างซึ่งดูเหมือนจะทำให้คำตอบนี้ทันสมัย:

@Dennis: การชำระเงิน git เช่นต้นกำเนิดการชำระเงิน git / ผลการทดสอบในส่วนหัว / สาขาที่ไม่มีชื่อในขณะที่การทดสอบการชำระเงิน git หรือการชำระเงิน git -b แหล่งกำเนิดการทดสอบ / ผลการทดสอบในการทดสอบสาขาท้องถิ่น ) - Jakub Narębski 9 มกราคม '14 ที่ 8:17

เน้นไปที่ git checkout origin/test


33
ไม่น่าแปลกใจ แต่รุ่นนี้เปิดตัวในช่วงไม่กี่ปีที่ผ่านมา - การรู้ไวยากรณ์นี้สามารถประหยัดเวลาได้มากเนื่องจากยังมีเอกสารเก่าจำนวนมากและเธรดความคิดเห็นที่ลอยอยู่รอบ ๆ ซึ่งแนะนำวิธีเก่าสำหรับการทำเช่นนี้
เคอร์ติส

10
"modern git" - สำหรับบันทึก (ประมาณ) คุณหมายถึงเวอร์ชั่นใด? บางครั้งเราต้องทำงานกับระบบที่ใช้ distros รุ่นเก่า
Craig McQueen

5
"modern git" ในบริบทนี้คือgit 1.6.6
Bobby Norton

10
@aidan หากคุณได้รับคำตอบเช่นerror: pathspec 'branch_name' did not match any file(s) known to git.นั้นคุณควรทำการเรียก git ก่อน
เดนนิส

6
การใช้ git เวอร์ชั่น 1.8.3.msysgit.0 และมันใช้ไม่ได้สำหรับฉัน - ไม่ตรงกับไฟล์ใด ๆ ที่ git รู้จัก - ฉันใช้ git fetches จำนวนมาก
PandaWood

564

ในกรณีนี้คุณอาจต้องการสร้างtestสาขาท้องถิ่นซึ่งกำลังติดตามtestสาขาระยะไกล:

$ git branch test origin/test

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


15
สิ่งนี้จะสร้างสาขาท้องถิ่นโดยไม่เปลี่ยนไปใช้
Alex Skrypnyk

2
แม้ว่าฉันจะถึงแก่ชีวิต: ชื่อวัตถุที่ไม่ชัดเจน: 'Origin / dev' - ซึ่งมีสาขา 'dev' ที่ต้นกำเนิดอยู่แน่นอนที่สุด - แต่ฉันบังเอิญสร้างสาขาที่เรียกว่า "Origin / dev" บนเครื่องของฉัน (ในความพยายามโง่ก่อนหน้านี้ เพื่อให้ถูกต้องไม่ต้องสงสัยเลย) ... ouch
PandaWood

1
ข้อผิดพลาดนี้ทำให้ฉันมีข้อผิดพลาด: ไม่สามารถส่งการอ้างอิงถึงคำใบ้ได้: การอัปเดตถูกปฏิเสธเนื่องจากทิปปลายกิ่งที่อยู่ด้านหลังคำแนะนำระยะไกล: คู่ ลองดูสาขานี้และรวมการเปลี่ยนแปลงคำแนะนำจากระยะไกล: (เช่น 'git pull') ก่อนที่จะกดอีกครั้ง คำใบ้: ดู 'หมายเหตุเกี่ยวกับการส่งต่อที่รวดเร็ว' ใน 'git push --help' สำหรับรายละเอียด
pal4life

475

คำตอบที่ยอมรับไม่ทำงานสำหรับคุณ?

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

$ git checkout -b remote_branch origin/remote_branch

ร้ายแรง: เช็คเอาต์ git: การอัพเดทพา ธ ไม่สามารถใช้งานได้กับการสลับแบรนช์
คุณตั้งใจจะเช็คเอาต์ 'Origin / remote_branch' ซึ่งไม่สามารถแก้ไขได้ตามที่มอบหมาย?

สารละลาย

ถ้าคุณได้รับข้อความนี้ก่อนอื่นคุณต้องทำgit fetch originที่เป็นชื่อของพื้นที่เก็บข้อมูลระยะไกลก่อนที่จะมีการเรียกใช้origin git checkout remote_branchนี่คือตัวอย่างเต็มรูปแบบที่มีการตอบสนอง:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

อย่างที่คุณเห็นการเรียกใช้การgit fetch originเรียกใช้สาขาระยะไกลใด ๆ ที่เรายังไม่ได้ติดตั้งเพื่อติดตามบนเครื่องท้องถิ่นของเรา จากที่นั่นเนื่องจากตอนนี้เรามีการอ้างอิงไปยังสาขาระยะไกลเราสามารถเรียกใช้git checkout remote_branchและเราจะได้รับประโยชน์จากการติดตามระยะไกล


2
ฉันจะเพิ่มบันทึกย่อหากคุณมีสาขาแยกต่างหากในเครื่อง: ตรวจสอบให้แน่ใจว่าคุณได้เชื่อมโยงกับ repo ระยะไกลโดยใช้ 'ต้นกำเนิดเพิ่มระยะไกล git [the_path_to_your_repo / repo_name.git]' จากนั้นใช้ 'git fetch origin' โดยที่ 'origin' หมายถึงที่เก็บต้นฉบับที่คุณสร้างการเชื่อมโยงไว้
elliotrock

git checkout -b newbranchยังใช้งานได้ดีสำหรับขั้นตอนเดียวในการสร้างและชำระเงินสาขาใหม่ตามสาขาปัจจุบัน
Linus

2
ฉันคิดว่านี่เป็นสิ่งที่ทันสมัยที่สุด (มันทำให้ $ @ #! ing เปลี่ยนแปลง!) Git 2.5.5 ฉันพบวิธีเดียวที่จะเห็นกิ่งไม้ที่อยู่ห่างไกลgit ls-remoteและวิธีเดียวที่จะใช้หนึ่งคือgit checkout -b [branch] --track [remote/branch]... และหลังจากนั้นก็ git pull [remote] [branch]ทำงาน คือจริง ๆ แล้วมันดึงสาขาทั้งหมด แต่ก็ยังคงไม่แสดงรายการ
ละเอียดอ่อน

และเมื่อคำตอบนี้ไม่ได้ทำงานอย่างใดอย่างหนึ่งให้ดูนี้
eis

เพียงเพิ่มถ้าคุณgit fetch other_remote only_branchคุณยังคงได้รับfatalข้อผิดพลาด คุณต้องgit fetch other_remoteไม่มีชื่อสาขา การออกแบบแปลก ๆ
est

258

ฉันลองวิธีแก้ปัญหาด้านบน แต่ไม่ได้ผล ลองสิ่งนี้มันใช้งานได้:

git fetch origin 'remote_branch':'local_branch_name'

สิ่งนี้จะดึงข้อมูลรีโมตสาขาและสร้างสาขาโลคัลใหม่ (หากไม่มีอยู่แล้ว) พร้อมชื่อlocal_branch_nameและติดตามรีโมตภายใน


37
สิ่งนี้ใช้ได้สำหรับฉันเมื่อไม่ได้เรียก git มาหรือการอัพเดทแบบรีโมต git สร้างสาขาท้องถิ่น ฉันไม่แน่ใจว่าทำไม
Godsmith

4
นี่เป็นวิธีที่ตรงที่สุดในการบรรลุสิ่งที่ฉันต้องการซึ่งก็คือการใช้สาขาระยะไกล (ไม่ใช่ต้นแบบ) เพื่อสร้างสาขาใหม่
Roralee

7
ทำงานได้อย่างราบรื่นโดยเฉพาะอย่างยิ่งเมื่อมีการโคลนกิ่งเดียวจากระยะไกลที่มีหลายสาขา
Alex C

7
มันก็ใช้ได้กับฉันด้วยเช่นกันคำตอบที่ยอมรับและคะแนนโหวตอื่น ๆ ก็ไม่ได้เช่นกัน เวอร์ชันคอมไพล์ของฉันคือ 2.5.0
pdepmcp

5
ไม่มีใครมีความคิดว่าทำไมสิ่งนี้ถึงใช้ได้เมื่อทุกอย่างไม่มี (ฉันใช้คอมไพล์ 2.13.0)
นาธานอาร์เธอร์

108

นี่จะเป็นDWIMสำหรับรีโมทที่ไม่มีชื่อกำเนิด ( เอกสาร ):

$ git checkout -t remote_name/remote_branch

ในการเพิ่มรีโมตใหม่คุณจะต้องทำสิ่งต่อไปนี้ก่อน:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

คนแรกบอก Git ว่ามีรีโมตอยู่ส่วนที่สองรับคอมมิท


104

ใช้:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

คำตอบอื่น ๆ ไม่สามารถใช้งานกับ Git ที่ทันสมัยในกรณีที่ฉันใจดี คุณอาจต้องดึงก่อนหากสาขาระยะไกลเป็นสาขาใหม่ แต่ฉันยังไม่ได้ตรวจสอบเคส


2
คุณรู้ไหมว่านี่เป็นส่วนหนึ่งของคำตอบ
Thomas Ayoub

14
ดูที่ตอนนี้พวกเขาทับซ้อนกัน ของฉันเท่านั้นที่รวบรัดและบอกคุณว่าต้องทำอะไรมากกว่าบอกเล่าเรื่องราว ฉันคิดว่ามันจะมีประโยชน์มากกว่าดังนั้นโดยเฉพาะอย่างยิ่งสำหรับเวอร์ชัน git ในปัจจุบัน คุณสามารถลงคะแนนถ้าคุณคิดว่ามันเป็นคำตอบที่ไม่ดี
matanster

1
git fetch เป็นตัวเลือกที่ปลอดภัย ลองดึงข้อมูลก่อนใช้ pull ทั้งดาวน์โหลดเนื้อหาจากระยะไกล แต่ในขณะที่การดึงข้อมูลไม่เปลี่ยนสถานะโลคัล pull จะเปลี่ยนสถานะโลคัลทันที
Peter Szalay

89

ตกลงคำตอบนั้นง่ายมาก ... โดยทั่วไปคุณเห็นสาขา แต่คุณยังไม่มีสำเนาในท้องที่! ...

คุณต้องการfetchสาขา ...

คุณสามารถดึงข้อมูลจากนั้นเช็คเอาต์ไปที่สาขาใช้คำสั่งหนึ่งบรรทัดด้านล่างเพื่อทำเช่นนั้น:

git fetch && git checkout test

ฉันได้สร้างภาพด้านล่างเพื่อให้คุณสามารถแบ่งปันความแตกต่างดูวิธีการfetchทำงานและความแตกต่างของpull:

เรียก git


@DmitriZaitsev ใช่มันจะทำงานถ้าสาขาระยะไกลอยู่ที่นั่นและคุณดึงข้อมูลคุณจะได้รับสาขาในพื้นที่ ... git fetch & & git การชำระเงินการทดสอบ .. ดังนั้นงานนี้เว้นแต่จะไม่มีสาขาระยะไกล แต่ คำถามที่บอกว่ามีสาขาระยะไกลอยู่ที่นั่นแล้ว ...
Alireza

วิธีที่ฉันเห็นคำถามtestดูเหมือนว่าจะเป็นสาขาใหม่ดังนั้นจึงไม่น่าจะมีอยู่ในท้องถิ่น มิฉะนั้นคุณสามารถดึงมันได้ง่ายขึ้นด้วยgit pullคำสั่งเดียว
Dmitri Zaitsev

@DmitriZaitsev ใช่นั่นคือเหตุผลที่ฉันพูด git fetch ตรวจสอบสาขาระยะไกลที่เพิ่งสร้าง pull สามารถนำสิ่งที่ไม่พึงประสงค์อื่น ๆ เข้ามาได้ แต่ fetch ทำให้ทุกสาขาพร้อมใช้งานถ้าคุณมี repo อยู่ภายใน ...
Alireza

จะfetchไม่มีpullการเปลี่ยนแปลงการคัดลอกในการดึงข้อมูล แต่ไม่ได้อยู่ในสาขาท้องถิ่นทำให้สาขาในประเทศของคุณไม่ทันสมัย
Dmitri Zaitsev

56

หากต้องการโคลนที่เก็บ Git ให้ทำ:

git clone <either ssh url /http url>

คำสั่งดังกล่าวจะตรวจสอบสาขาทั้งหมด แต่เฉพาะmasterสาขาจะเริ่มต้นได้ หากคุณต้องการชำระเงินที่สาขาอื่นให้ทำ:

git checkout -t origin/future_branch (for example)

คำสั่งนี้เช็กเอาต์รีโมตสาขาและชื่อสาขาโลคัลของคุณจะเหมือนกับสาขารีโมต

หากคุณต้องการแทนที่ชื่อสาขาในพื้นที่ของคุณในการชำระเงิน:

git checkout -t -b enhancement origin/future_branch

ตอนนี้ชื่อสาขาในประเทศของคุณมีแต่ชื่อสาขาที่ห่างไกลของคุณenhancementfuture_branch

เอกสาร


git clone <อย่างใดอย่างหนึ่ง ssh url / http url> - ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน
Kmeixner

ใช่คุณถูกต้อง. ขอบคุณสำหรับข้อมูลของคุณฉันจะอัปเดตเร็ว ๆ นี้ @warvariuc
Madhan Ayyasamy

หากรีโมทไม่มีmasterสิ่งนี้จะไม่ทำงาน
polkovnikov.ph

36

คุณสามารถลอง

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

หรือ

git fetch
git checkout -b local_branch_name origin/branch_name

2
FYI, --trackไม่มีความจำเป็นในรุ่นใหม่ของคอมไพล์เพราะมันเป็นชุดโดยเริ่มต้นที่อธิบายไว้ในคำตอบก่อนหน้านี้

33

ก่อนอื่นคุณต้องทำ:

git fetch # ถ้าคุณไม่รู้ชื่อสาขา

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

-b จะสร้างสาขาใหม่ในชื่อที่ระบุจากสาขาระยะไกลที่คุณเลือก


ฉันไม่เข้าใจ -b หากคุณสามารถ "ชำระเงินหลัก git" ทำไมคุณไม่ทำ "กำเนิด git ชำระเงิน / ทดสอบ"?
John Little

-b สำหรับสาขาใหม่ที่มาจากต้นกำเนิด / หลัก
Mohideen bin Mohammed

28

ฉันใช้คำสั่งต่อไปนี้:

git checkout --track origin/other_remote_branch

13
คำตอบนี้จะมีประโยชน์มากขึ้นถ้าคุณอธิบายว่าทำไมคุณใช้มันด้วยวิธีนี้ นั่นคือเหตุผลที่บางคนควรใช้ '- แทร็ก' และอื่น ๆ ...
แมตต์ฟรีดแมน

27

คำสั่ง

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

มีค่าเท่ากับ

 git fetch --all

แล้ว

 git checkout -b fixes_for_dev origin/development

ทั้งสองจะสร้างlatest fixes_for_devจากdevelopment


24

หากสาขาอยู่ในสิ่งอื่นนอกเหนือจากoriginระยะไกลฉันชอบที่จะทำต่อไปนี้:

$ git fetch
$ git checkout -b second/next upstream/next

นี้จะชำระเงินnextสาขาในระยะไกลในสาขาท้องถิ่นที่เรียกว่าupstream second/nextซึ่งหมายความว่าถ้าคุณมีสาขาท้องถิ่นชื่อถัดไปมันจะไม่ขัดแย้ง

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next


18

ไม่มีคำตอบใดที่เหมาะกับฉัน สิ่งนี้ทำงาน:

git checkout -b feature/branch remotes/origin/feature/branch


1
ขอบคุณ ฉันสงสัยว่าฉันต้องใช้เส้นทางแบบเต็ม ( รีโมท / แหล่งกำเนิด / คุณสมบัติ / สาขา ) ที่ฉันเห็นgitเมื่อเรียกgit branch -aคำสั่ง แต่ฉันไม่แน่ใจดังนั้นฉันจึงใช้git checkout -b apps/FEATURE/branch origin/apps/FEATURE/branchและดูเหมือนว่าจะใช้งานได้ ข้อความ:Branch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
Chris22

18

ฉันติดอยู่ในสถานการณ์ที่เห็น error: pathspec 'desired-branch' did not match any file(s) known to git.ข้อเสนอแนะทั้งหมดข้างต้น ฉันใช้ git เวอร์ชั่น 1.8.3.1

ดังนั้นนี่ทำงานสำหรับฉัน :

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

คำอธิบายที่อยู่เบื้องหลังคือฉันได้สังเกตเห็นว่าเมื่อดึงสาขาระยะไกลมันถูกดึงไป FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

17

เพียงเรียกใช้git checkoutด้วยชื่อของสาขาระยะไกล Git จะสร้างสาขาในพื้นที่ที่ติดตามรีโมตโดยอัตโนมัติ :

git fetch
git checkout test

อย่างไรก็ตามหากพบชื่อสาขาในรีโมตมากกว่าหนึ่งตัวสิ่งนี้จะไม่ทำงานเนื่องจาก Git ไม่รู้ว่าจะใช้อะไร ในกรณีนี้คุณสามารถใช้:

git checkout --track origin/test

หรือ

git checkout -b test origin/test

ใน2.19 Git ได้เรียนรู้การcheckout.defaultRemoteกำหนดค่าซึ่งระบุระยะไกลเป็นค่าเริ่มต้นเมื่อแก้ไขความกำกวมดังกล่าว


16

git branch -rแจ้งว่าชื่อวัตถุไม่ถูกต้องเนื่องจากชื่อสาขานั้นไม่อยู่ในรายการสาขาในท้องถิ่นของ Git อัปเดตรายการสาขาในพื้นที่ของคุณจากต้นทางด้วย:

git remote update

จากนั้นลองตรวจสอบสาขาระยะไกลของคุณอีกครั้ง

สิ่งนี้ใช้ได้สำหรับฉัน

ฉันเชื่อว่าgit fetchดึงในทุกจากสาขาที่อยู่ห่างไกลซึ่งไม่ใช่สิ่งที่โปสเตอร์ดั้งเดิมต้องการ


2
FYI, นอกจากนี้ยังจะดึงข้อมูลจากระยะไกลทุกสาขาgit remote update

13

git remote show <origin name>คำสั่งจะแสดงรายการทุกสาขา (รวมถึงสาขายกเลิกการติดตาม) จากนั้นคุณสามารถค้นหาชื่อสาขาระยะไกลที่คุณต้องการดึงข้อมูล

ตัวอย่าง:

$ git remote show origin

ใช้ขั้นตอนเหล่านี้เพื่อดึงข้อมูลสาขาระยะไกล:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

ตัวอย่าง:

$ git fetch origin test:test
$ git checkout test

@ Hallski ตอบว่าไม่ทำงาน 2.15.1 รุ่น แต่ฉันได้ลดไฟล์. git weigth clone เพียง 1 สาขาและกรองประวัติด้วย --depth flag ตัวอย่างเช่น$ git clone -b release --single-branch --depth 5 https://github.com/user/repo.gitข้อมูลที่$ git remote show originไม่ได้สิ่งนี้ไม่ได้ระบุสาขาระยะไกลทั้งหมดที่มีที่เก็บโคลนสาขาเดียว
Qh0stM4N

10

ดึงข้อมูลจากระยะไกลและเช็คเอาต์สาขา

git fetch <remote_name> && git checkout <branch_name> 

เช่น:

git fetch กำเนิด && git คุณสมบัติการชำระเงิน / XYZ-1234- เพิ่มการแจ้งเตือน


9

ผู้ชายและผู้หญิงคนอื่น ๆ ให้ทางออก แต่บางทีฉันสามารถบอกคุณได้ว่าทำไม

ทดสอบการชำระเงิน git ซึ่งไม่ทำอะไรเลย

Does nothingไม่เท่ากันdoesn't workดังนั้นฉันเดาว่าเมื่อคุณพิมพ์ 'ทดสอบการชำระเงิน git' ในเทอร์มินัลแล้วกดปุ่ม Enter ไม่มีข้อความปรากฏขึ้นและไม่มีข้อผิดพลาดเกิดขึ้น ฉันถูกไหม?

หากคำตอบคือ 'ใช่' ฉันสามารถบอกสาเหตุได้

สาเหตุคือมีไฟล์ (หรือโฟลเดอร์) ชื่อ 'test' ในแผนผังการทำงานของคุณ

เมื่อgit checkout xxxแยกวิเคราะห์

  1. Git มองxxxว่าเป็นชื่อสาขาในตอนแรก แต่ไม่มีการทดสอบชื่อสาขาใด ๆ
  2. จากนั้น Git คิดว่าxxxเป็นเส้นทางและโชคดีที่มีไฟล์ชื่อ test ดังนั้นgit checkout xxxหมายถึงยกเลิกการดัดแปลงใด ๆ ในxxxไฟล์
  3. หากไม่มีไฟล์ชื่อxxxเช่นนั้น Git จะพยายามสร้างxxxตามกฎบางอย่าง หนึ่งในกฎคือการสร้างสาขาชื่อxxxถ้าremotes/origin/xxxมีอยู่

ขอบคุณพยายามคิดออกว่าทำไมคอมไพล์ไม่ทำอะไร
Mike R

8

เพื่อรับสาขาที่สร้างขึ้นใหม่

git fetch

เพื่อเปลี่ยนเป็นสาขาอื่น

git checkout BranchName

6

คุณสามารถเริ่มติดตามสาขาระยะไกลทั้งหมดด้วยสคริปต์ Bash ต่อไปนี้:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

นี่คือรุ่นบรรทัดเดียว:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

5

git checkout -b "Branch_name" [B หมายถึงสร้างสาขาในท้องถิ่น]

สาขา git - ทั้งหมด

git checkout -b "ชื่อสาขาของคุณ"

สาขาคอมไพล์

ชำระเงินสำเร็จจากสาขาหลักไปยังสาขา dev

ป้อนคำอธิบายรูปภาพที่นี่


git checkout -b "Branch_name" [B หมายถึงสร้างสาขาในท้องถิ่น]
Keshav Gera

3

เพื่อให้สาขาระยะไกลทั้งหมดใช้สิ่งนี้:

git fetch --all

จากนั้นชำระเงินไปที่สาขา:

git checkout test

2

ใช้fetchเพื่อดึงรีโมตทั้งหมดของคุณ

   git fetch --all

ในการแสดงรายการสาขาระยะไกล:

   git branch -r

สำหรับรายการสาขาทั้งหมดของคุณ

   git branch -l
   >>outpots like-
     * develop
       test
       master

วิธีชำระเงิน / เปลี่ยนสาขา

   git checkout master

พยายามgit branch -lแล้วและไม่ปรากฏสาขาระยะไกล
Dmitri Zaitsev

ใช้git pull --allหรือgit fetch --all
Nasir Khan

ใช่และหลังจากนั้นgit branch -l ยังคงแสดงเฉพาะสาขาในพื้นที่เท่านั้น ดูเหมือนว่าจะทำงานอย่างถูกgit branchต้องโดยไม่ต้อง-lมีเหตุผล-lอะไร
Dmitri Zaitsev

คำตอบของคุณไม่ตอบคำถาม - masterไม่ใช่สาขาระยะไกล
Dmitri Zaitsev

1
-lตั้งค่าสถานะสำหรับรายการ คุณสามารถใช้ได้--listเช่นกัน
Nasir Khan

2

สำหรับเราดูเหมือนว่าการremote.origin.fetchกำหนดค่าให้ปัญหา ดังนั้นเราจึงไม่เห็นสาขาระยะไกลอื่น ๆ นอกเหนือไปจากmasterนั้นจึงgit fetch [--all]ไม่ช่วย ทั้งgit checkout mybranchหรือgit checkout -b mybranch --track origin/mybranchทำงานแม้ว่ามันแน่นอนอยู่ในระยะไกล

การกำหนดค่าก่อนหน้านี้อนุญาตmasterให้ดึงข้อมูลได้เท่านั้น:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

แก้ไขได้โดยใช้*และดึงข้อมูลใหม่จากแหล่งกำเนิด:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

ตอนนี้เราสามารถgit checkoutสาขาระยะไกลในท้องถิ่น

ไม่ทราบว่าการกำหนดค่านี้สิ้นสุดลงในธุรกรรมซื้อคืนภายในเครื่องของเราอย่างไร


1
สิ่งนี้แก้ไขได้สำหรับฉันตั้งแต่ฉันโคลนสาขาเดียว
Pontus Holmbom

2

หากชื่อสาขาระยะไกลเริ่มต้นด้วยอักขระพิเศษคุณต้องใช้อัญประกาศล้อมรอบในคำสั่งเช็คเอาต์มิฉะนั้น git จะไม่ทราบว่าคุณกำลังพูดถึงสาขาใด

ตัวอย่างเช่นฉันพยายามชำระเงินสาขาระยะไกลที่ตั้งชื่อเป็น#9773แต่คำสั่งทำงานไม่ถูกต้องดังแสดงในภาพด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยเหตุผลบางอย่างฉันสงสัยว่าสัญลักษณ์คม (#) อาจมีบางอย่างเกี่ยวข้องกับมันหรือไม่จากนั้นฉันลองล้อมรอบชื่อสาขาด้วยเครื่องหมายอัญประกาศเดี่ยวเช่นรา ธ'#9773'มากกว่าเพียงแค่#9773และโชคดีที่มันทำงานได้ดี

$ git checkout -b '#9773' origin/'#9773'

ในเชลล์ยูนิกซ์หลาย#ตัวอักขระที่ใช้สำหรับความคิดเห็นดังนั้นสิ่งใดหลังจากนั้น#จะถูกละเว้น นี่คือสิ่งที่เชลล์และไม่ใช่สิ่งที่เฉพาะเจาะจงกับคอมไพล์ การใช้เครื่องหมายคำพูดของแบ็กสแลชก่อนที่#ควรจะเพียงพอ
เปาโล Scardine

1

โปรดทำตามคำสั่งเพื่อสร้างโฟลเดอร์ว่าง ป้อนและใช้คำสั่งนี้:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.