Git ดึงสาขาจากระยะไกล


2260

เพื่อนร่วมงานของฉันและฉันกำลังทำงานในพื้นที่เก็บข้อมูลเดียวกัน เราได้แยกออกเป็นสองสาขาแต่ละทางเทคนิคสำหรับโครงการที่แตกต่างกัน แต่พวกเขามีความคล้ายคลึงกันดังนั้นบางครั้งเราจะต้องการที่จะกระทำกลับไป * The จากmasterbranch

branchแต่ผมมี เพื่อนร่วมงานของฉันจะดึงสาขานั้นโดยเฉพาะได้อย่างไร

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

-b checkoutนอกจากนี้เมื่อฉันเดิมทำสาขาที่ผมทำ มันสร้างความแตกต่างได้มากน้อยแค่ไหน?

$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

$ git fetch origin discover
$ git checkout discover

นี่คือคำสั่งที่ฉันใช้ แต่มันไม่ทำงานแน่นอน

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


9
เป็นไปได้ที่ซ้ำกันของgit checkout สาขาที่ห่างไกล
Andrew Marshall

33
ฉันใช้: git fetch --all, จากนั้นเพื่อดูสาขาทั้งหมด: git branch, จากนั้นฉันเช็คเอาต์สาขา:git checkout nameofnewbranch
Jeff Mattson

ตรวจสอบคำถามของคุณได้ที่/programming/1072261/push-and-pull-branches-in-git/47780374#47780374
Rizo


6
git fetch origin discover:discover && git checkout discover
Gayan Weerakutti

คำตอบ:


3059

คุณต้องสร้างสาขาท้องถิ่นที่ติดตามสาขาระยะไกล คำสั่งต่อไปจะสร้างชื่อสาขาท้องถิ่นdaves_branchติดตามสาขาที่ห่างไกลแหล่งกำเนิด / daves_branch เมื่อคุณผลักดันการเปลี่ยนแปลงสาขาระยะไกลจะได้รับการอัพเดต

สำหรับ Git รุ่นล่าสุด:

git checkout --track origin/daves_branch

--trackเป็นชวเลขสำหรับgit checkout -b [branch] [remotename]/[branch]ที่ [remotename] มีต้นกำเนิดในกรณีนี้และ [สาขา] สองครั้งเหมือนกันdaves_branchในกรณีนี้

สำหรับ Git 1.5.6.5 คุณต้องการสิ่งนี้:

git checkout --track -b daves_branch origin/daves_branch

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

git checkout daves_branch

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

รายละเอียดทั้งหมดอยู่ที่นี่: 3.5 Git Branching - สาขาระยะไกล, สาขาการติดตาม


134
"เรียก git" เพื่อให้แน่ใจว่า repo ของคุณได้รับการอัปเดตด้วยการอ้างอิงระยะไกลและ "git checkout - track กำเนิด / ค้นหา" ควรจะเพียงพอ จากนั้นคุณสามารถส่งไปยังสาขานั้นและ "git push" เพื่อซิงค์รีโมตกับการเปลี่ยนแปลงของคุณ
ralphtheninja

33
ฉันลองและได้รับ "ร้ายแรง: เช็คเอาต์ git: การอัปเดตเส้นทางไม่สอดคล้องกับการสลับสาขาคุณตั้งใจจะเช็คเอาต์ 'อัปสตรีม / พัฒนา' ซึ่งไม่สามารถแก้ไขได้ตามที่มอบหมายหรือไม่" ฉันกำลังทำอะไรผิดหรือเปล่า?
Neil Barnwell

42
ดูเหมือนว่า git 1.5.6.5 ต้องการสิ่งนี้แทน: git checkout --track -b origin / daves_branch
Charlie

35
สิ่งนี้ทำให้ฉันเป็นระเบียบมันสร้างสาขาท้องถิ่นชื่อกำเนิด / <branch> ซึ่งตอนนี้คลุมเครือกับที่มาของสาขาระยะไกล / <branch> และฉันไม่รู้วิธีกำจัดสาขาท้องถิ่นที่บ้าคลั่ง!
Alan Moore

24
คุณต้องเพิ่มชื่อสาขาในพื้นที่อย่างชัดเจนมิฉะนั้น git จะสร้างสาขาในพื้นที่ใหม่ด้วยเส้นทางสาขาแบบเต็มตามที่ @AlanMoore และ @ derekmx271 ตามที่ระบุไว้ด้านบน:git checkout -b --track daves_branch origin/daves_branch
Mike Scott

961

ฉันใช้fetchแล้วตามด้วยcheckout...

git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>

... ซึ่ง<rbranch>เป็นสาขาระยะไกลหรือแหล่งอ้างอิงและ<lbranch>เป็นสาขาท้องถิ่นหรืออ้างอิงปลายทางที่ไม่มีอยู่ที่คุณต้องการติดตามและที่คุณอาจต้องการตั้งชื่อเหมือนสาขาระยะไกลหรือแหล่งอ้างอิง นี่คือคำอธิบายภายใต้ตัวเลือกในการอธิบายของ<refspec>

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

เช่นเดียวกับคำตอบในโพสต์สแต็คโอเวอร์โฟลว์ที่คล้ายกันนี้แสดงถ้าคุณไม่ได้ตั้งชื่อสาขาในตัวfetchคุณยังสามารถสร้างมันได้เมื่อคุณเช็คเอาท์โดยใช้-bแฟล็ก นั่นคือ git fetch <remote> <branch>ตามด้วยgit checkout -b <branch> <remote>/<branch>ไม่เหมือนกับคำตอบเริ่มต้นของฉัน และถ้าหากที่เก็บของคุณมีรีโมทเพียงอันเดียวคุณก็สามารถทำได้git checkout <branch>หลังจากfetchนั้นมันจะสร้างสาขาท้องถิ่นให้คุณ ตัวอย่างเช่นคุณเพิ่งโคลนที่เก็บและต้องการตรวจสอบสาขาเพิ่มเติมจากระยะไกล

ผมเชื่อว่าบางส่วนของเอกสารสำหรับอาจจะได้รับการคัดลอกคำต่อคำจากfetch pullโดยเฉพาะอย่างยิ่งส่วนบน<refspec>ในตัวเลือกเหมือนกัน แต่ผมไม่เชื่อว่าfetchจะเคยmergeเพื่อที่ว่าถ้าคุณออกจากด้านปลายทางของลำไส้ใหญ่ว่างควรจะทำอะไรfetch

หมายเหตุ: git fetch <remote> <refspec>สั้นgit fetch <remote> <refspec>:ซึ่งจะไม่ทำอะไรเลย แต่git fetch <remote> <tag>เหมือนกับgit fetch <remote> <tag>:<tag>ที่ควรคัดลอกรีโมท<tag>ในเครื่อง

ฉันเดาว่านี่จะมีประโยชน์เฉพาะในกรณีที่คุณต้องการคัดลอกสาขาระยะไกลในพื้นที่ แต่ไม่จำเป็นต้องตรวจสอบทันที มิฉะนั้นตอนนี้ฉันจะใช้คำตอบที่ยอมรับซึ่งจะอธิบายรายละเอียดในส่วนแรกของคำอธิบายการชำระเงินและต่อมาในส่วนตัวเลือกภายใต้คำอธิบายของ--trackเพราะมันเป็นหนึ่งซับ เอ่อ ...ซับในหนึ่งแถวเพราะคุณยังต้องวิ่งgit fetch <remote>ก่อน

FYI: คำสั่งซื้อของ<refspecs>(ที่มา: ปลายทาง) อธิบายที่แปลกประหลาดก่อน Git 1.7 วิธีการลบสาขาระยะไกล นั่นคือไม่มีอะไรที่จะผลักดันผู้อ้างอิงปลายทาง


8
คุณคิดว่าการเติมข้อความอัตโนมัติ Git ได้รับการตั้งค่าแล้ว code-worrier.com/blog/autocomplete-git
antonagestam

2
สิ่งนี้ทำงานให้ฉันเพื่อรับรหัสระยะไกลในสาขาท้องถิ่น อย่างไรก็ตามไม่ได้รับสาขาในพื้นที่ของฉันเพื่อติดตามสาขาระยะไกล
Aknosis

1
ด้วยเหตุผลบางอย่างgit fetch remote branchไม่ได้เพิ่มหัวหน้าสาขาเลยสำหรับฉันแม้ว่าการอ้างอิงทั้งหมดจะถูกดึงออกมาดังนั้นเมื่อฉันพยายามทำตามขั้นตอนในคำตอบที่ยอมรับฉันได้รับข้อผิดพลาดpathspec did not match any file(s) known to git.แต่rbranch:lbranchวิธีการทำงาน ที่น่าสนใจมันยังดึงแท็กทั้งหมดที่เริ่มต้นด้วยคำนำหน้าเหมือนกันเหมือนเป็นตัวแทน ( rbranch*)
haridsv

3
Nit: git ไม่ทำการเติมอัตโนมัติมันเป็น bash shell ที่ทำมัน
ทำให้ถูกกฎหมาย

1
FWIW ฉันคิดว่าความแตกต่างระหว่างคำตอบนี้กับคำตอบที่ยอมรับคือคำนี้บอกให้คุณทำfetchคำสั่ง คำตอบที่ได้รับการยอมรับนั้นสมเหตุสมผลเพราะ OP ตั้งข้อสังเกตว่าเขาดึงข้อมูลมาแล้ว อย่างน้อยก็เป็นปัญหาที่ฉันพบ
tenor528

373

หากคุณพยายามที่จะ "ชำระเงิน" สาขาระยะไกลใหม่ (ที่มีอยู่เฉพาะในระยะไกล แต่ไม่ใช่ในพื้นที่) นี่คือสิ่งที่คุณต้องการ:

git fetch origin
git checkout --track origin/<remote_branch_name>

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


1
ทำงานให้ฉันฉันไม่ได้ดึงสาขาระยะไกลที่ถูกต้องดังนั้นคำตอบที่ยอมรับจึงล้มเหลวสำหรับฉันด้วยข้อความที่สับสน +1
Nathan Hinchey

โดยปกติแล้วฉันใช้ git fetch แต่สิ่งที่แตกต่างระหว่าง git fetch และ git fetch ที่มาคืออะไร?
Ping Woo

@PingWoo สมมติว่าสาขาที่คุณต้องการดึงข้อมูลอยู่ในแหล่งกำเนิดระยะไกลทั้งคู่git fetchและgit fetch remoteจะทำสิ่งเดียวกัน หากคุณจำเป็นต้องดึงข้อมูลจากระยะไกลอื่น ๆ กว่าคุณสามารถดำเนินการได้โดยใช้origin git fetch <other_remote_name>สถานการณ์นี้เป็นเรื่องผิดปกติอย่างมากเพียงกล่าวถึงที่นี่เพื่อความสมบูรณ์
paneer_tikka

1
ฉันเกือบชนหัวของฉันกับพีซีที่พยายามแก้ปัญหาทั้งหมดนี้ ปรากฎว่าฉันพิมพ์ผิดในชื่อสาขาของฉันฮิฮิโง่
Dev Yego

126

หากต้องการชำระเงิน myBranch ที่มีอยู่ในระยะไกลไม่ใช่ในเครื่อง - สิ่งนี้ใช้ได้สำหรับฉัน:

git fetch --all
git checkout myBranch

ฉันได้รับข้อความนี้:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

1
ในคำอื่น ๆ ที่คุณไม่ต้องเขียน-t?
Andrew Samuelsen

4
ฉันคิดว่ามีข้อผิดพลาดในคำตอบนี้ เดิมทีฉันทำตามคำสั่งโดยไม่-tได้รับYou are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.เนื่องจากไม่มีสาขาท้องถิ่นที่มีชื่อเดียวกัน ฉันต้องเรียกใช้ซ้ำ-tเพื่อแก้ไข
stanri

1
สิ่งนี้ทำงานได้ดีสำหรับฉัน - เพื่อนร่วมงานของฉันได้เพิ่มสาขาระยะไกลใหม่ที่ฉันต้องการเพิ่มไปยัง repo ในพื้นที่ของฉัน ฉันดึงข้อมูลมาเรื่อย ๆ แต่ไม่เห็นว่าสาขาใหม่จะปรากฏในเครื่อง ไม่ได้ตระหนักว่าฉันสามารถเรียกใช้checkoutเพื่อสร้างมันได้ ขอบคุณ!
skwidbreth

2
ขึ้นอยู่กับรุ่นคอมไพล์ รุ่นล่าสุดตามที่กล่าวไว้ที่อื่นที่นี่ต้องการเพียงการชำระเงิน git <ชื่อสาขาที่จุดกำเนิด> ระวังด้วยชื่อเดียวกันกับ LOCAL กับสาขาระยะไกล - พวกเขาจะเลอะสิ่งต่าง ๆ ขึ้น
leRobot

--allไม่ใช่ความคิดที่ดีเพราะมันจะดาวน์โหลดทุกไฟล์ในทุกสาขา จะใช้เวลาและพื้นที่มากขึ้น ดีกว่าที่จะระบุชื่อสาขาและทำเช่นนี้
น้ำผึ้ง

53

ใช้git branch -a(ทั้งสาขาในพื้นที่และสาขาที่อยู่ห่างไกล) หรือgit branch -r(เฉพาะสาขาที่อยู่ห่างไกล) เพื่อดูรีโมตและสาขาทั้งหมด จากนั้นคุณสามารถทำgit checkout -t remotes/repo/branchกับรีโมตและสร้างสาขาท้องถิ่น

นอกจากนี้ยังมีคำสั่ง git-ls-remoteเพื่อดู refs และแท็กทั้งหมดสำหรับรีโมตนั้น


git checkout remotes/repo/branchทำให้การตรวจสอบ git ดูเป็น pathspec ไม่ใช่ repo ระยะไกล
อีริน

1
ใช่มันเป็นไปได้ที่จะชำระเงินสาขาใน repo ระยะไกลหรือไม่? เห็นได้ชัดว่า (หรืออาจจะไม่ชัดเจน) การรีโมตจะถูกดึงมาก่อนเพื่อที่คุณจะได้ใช้มันในเครื่อง หนังสือคอมไพล์มีส่วนที่ดีกับพวกเขา: git-scm.com/book/en/Git-Branching-Remote-Branches
Daniel Lee

43

ชื่อและคำถามสับสน:

  • Git ดึงสาขาจากระยะไกล
  • เพื่อนร่วมงานของฉันจะดึงสาขานั้นได้อย่างไรโดยเฉพาะ

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

ด้วย Git (> = 1.6.6) คุณสามารถใช้:

git checkout <branch_name>

หาก<branch_name>ไม่พบโลคอล แต่มีสาขาการติดตามอยู่ในรีโมตเดียวที่มีชื่อตรงกันให้ถือว่าเป็นรีโมต:

git checkout -b <branch_name> --track <remote>/<branch_name>

ดูเอกสารประกอบการชำระเงิน Git

สำหรับเพื่อนของคุณ:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

ขอบคุณ Guillaume! ฉันเพิ่งใช้คำสั่งนี้และเขียนโพสต์เกี่ยวกับมันเพื่ออธิบายกรณีที่แน่นอนของฉัน: leniel.net/2014/05/…
Leniel Maccaferri

<! - git checkout <remote-branch-name> -> ทำงานตามที่คาดไว้ขอบคุณ Guillaume!
Sachidananda Naik

36

วิธีที่ง่ายที่สุดที่จะทำอย่างน้อยสำหรับฉัน:

git fetch origin <branchName> # Will fetch the branch locally
git checkout <branchName> # To move to that branch

1
อย่านำสาขาอื่นมา
เบนจามินฮาเรล

7
@BenjaminHarel คำถามที่ว่า "ดึงสาขาจากระยะไกล" ไม่ใช่สาขาทั้งหมด สำหรับการติดตามสิ่งนี้อาจเป็นประโยชน์สำหรับคุณstackoverflow.com/questions/10312521/ …
James Rochabrun

2
หลังจากใช้fetchคำสั่งนี้สาขาที่ต้องการจะสามารถใช้ได้ในเครื่องท้องถิ่น git checkout -b 'your_branch' origin/'remote branch'จะต้องทำการชำระเงินที่สาขานี้
Abhijeet

30

ใช้:

git checkout -b serverfix origin/serverfix

นี่เป็นการดำเนินการทั่วไปที่ Git จัดเตรียมไว้ให้--track:

git checkout --track origin/serverfix

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

git checkout serverfix

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

git checkout -b sf origin/serverfix

ตอนนี้สาขาในประเทศของคุณจะดึงโดยอัตโนมัติจากsforigin/serverfix

แหล่งที่มา: Pro Git รุ่นที่ 2เขียนโดย Scott Chacon และ Ben Straub (ตัดเพื่อให้อ่านง่าย)


การจดชวเลขเหล่านั้นเป็นบทเรียน
Z. Khullah


18

ในการดึงข้อมูลสาขาที่มีอยู่บนรีโมทวิธีที่ง่ายที่สุดคือ:

git fetch origin branchName
git checkout branchName

คุณสามารถดูว่ามีอยู่แล้วบนรีโมทด้วย:

git branch -r

การทำเช่นนี้จะดึงสาขาระยะไกลไปยังพื้นที่ของคุณและจะติดตามสาขาระยะไกลโดยอัตโนมัติ


2
คำถามนี้ไม่มี upvotes มากขึ้นได้อย่างไร ฉันอาจจะผิด แต่แน่ใจว่านี้ดูเหมือนจะทำเคล็ดลับดึงสาขาที่ฉันไม่ได้มีในท้องถิ่นจากระยะไกล ...
Nicholas Petersen

15

สิ่งที่ช่วยฉันได้คือ

1) เพื่อดูสาขาระยะไกลที่มีอยู่ทั้งหมด (เช่น 'remote-branch-name')

git branch -r

2) สร้างสาขาท้องถิ่นโดยใช้ชื่อสาขาระยะไกล

git fetch && git checkout 'remote-branch-name'

1
จะเกิดอะไรขึ้นเมื่อคุณรันคำสั่งgit pushโดยไม่มีข้อโต้แย้งอื่น ๆ เป็นสาขาในท้องถิ่นที่มีชื่อremote-branch-nameเกี่ยวข้องกับ (ติดตาม) origin/remote-branch-nameสาขาระยะไกลตั้งชื่อโดยอัตโนมัติ หรือว่าคุณต้องวิ่งgit push -u origin remote-branch-name
PatS

1
สิ่งนี้จะทำให้เกิดสถานะแยกเดี่ยวออกจากกัน
Akin Hwan

15

คุณสามารถดึงข้อมูลและตรวจสอบสาขาระยะไกลได้ในภาพเดียว:

git fetch && git checkout the-branch-name


13

ฉันพิมพ์

git checkout <branch_name>

และได้รับ

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

จากเอกสารการชำระเงิน git: หากไม่พบ <branch_name> แต่มีสาขาการติดตามในหนึ่งรีโมทที่มีชื่อตรงกันให้ถือว่าเทียบเท่ากับ:git checkout -b <branch_name> --track <remote>/<branch_name>
Guillaume Vincent

11

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

ดังนั้นหากต้องการโคลนสาขารีโมตเพียงอย่างเดียว (โดยไม่มีมาสเตอร์) ให้ทำสิ่งนี้

git clone url --branch remote_branch_name

โดยที่ remote_branch_name เป็นชื่อของ remote branch

ตัวอย่างเช่น,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

สิ่งนี้จะทำให้แน่ใจว่าคุณโคลนสาขาระยะไกลไปยังสาขาในพื้นที่ของคุณด้วยชื่อของสาขาระยะไกล

ตอนนี้ถ้าคุณส่งรหัสและกดรหัสจะถูกส่งไปยังสาขานั้นเพียงอย่างเดียว


ที่เกี่ยวข้อง: ฉันจะโคลนสาขาเดียวใน Git ได้อย่างไร - "git 1.7.10 (เมษายน 2012) จริง ๆ แล้วอนุญาตให้คุณโคลนสาขาเดียว:"
Peter Mortensen

11

[คำตอบที่รวดเร็ว]

มีทางเลือกมากมายและรายการโปรดของฉันคือ:

- ทางเลือก 1:

git fetch --all
git checkout YourBranch

การใช้ทางเลือกนี้โดยใช้สาขาที่มีอยู่ในระยะไกล แต่ไม่ใช่ในพื้นที่ของคุณ

- ทางเลือก 2:

git checkout -b 'YourBranch' origin/'YourRemote'

อาจเป็นวิธีที่ง่ายที่สุด


9

สมมติว่ารีโมตของคุณคือ git@xyz.git และคุณต้องการสาขา random_branch กระบวนการควรเป็นดังนี้:

  1. ก่อนอื่นให้ตรวจสอบรายการรีโมทของคุณก่อน

    git remote -v

  2. หากคุณไม่มี git@xyz.git รีโมตในเอาต์พุตของคำสั่งด้านบนคุณจะต้องเพิ่มเข้าไป

    git remote add xyz git@xyz.git

  3. ตอนนี้คุณสามารถดึงเนื้อหาของรีโมตนั้นได้ด้วย

    git fetch xyz

  4. ตอนนี้เช็คสาขาของรีโมทนั้นด้วย

    git checkout -b my_copy_random_branch xyz/random_branch

  5. ตรวจสอบรายชื่อสาขาโดย

    git branch -a

สาขาท้องถิ่น my_copy_random_branch จะติดตามสาขา random_branch ของรีโมตของคุณ




7

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

git fetch && git checkout discover

หลังจากรันคำสั่งข้างต้นคุณจะได้รับข้อความด้านล่าง:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from origin.

บรรทัดแรกระบุว่าเปลี่ยนเป็น สาขาใหม่ - ใหม่ทำไม มันมีอยู่แล้วในระยะไกล!

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

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

แต่บรรทัดที่สองให้ข้อมูลมากกว่าบรรทัดแรกซึ่งบอกเราว่า:

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

แม้ว่าจะgit fetch เรียกสาขาทั้งหมดไปยังท้องถิ่น แต่ถ้าคุณวิ่งgit branchตามมันคุณจะเห็นเฉพาะmasterสาขาในท้องถิ่น ทำไม ?

เพราะสำหรับทุกสาขาที่คุณอยู่ในระยะไกลคุณต้องสร้างมันขึ้นมาในพื้นที่ด้วยเช่นกันสำหรับการติดตามอย่างgit checkout <branchname>ที่เราทำในตัวอย่างด้านบน

หลังจากรันgit checkoutคำสั่งคุณสามารถเรียกใช้git branchและตอนนี้คุณสามารถดูทั้งสองสาขา:

  1. หลักและ 2. ค้นพบในรายการท้องถิ่นของคุณ


5

เพียงลอง:

git pull origin your_branch_name

2
Rizo ต้นกำเนิดดึงคอมไพล์ branch_name ควรเป็นทางออกที่ดีที่สุด คุณเป็นคนเดียวที่โพสต์สิ่งนี้เป็นวิธีแก้ปัญหาและใช้งานได้สำหรับฉัน ใช้งานได้เพราะจะอัปเดตสาขาของคุณด้วยสาขาหลัก ง่ายและไม่ซับซ้อน
Ian Poston Framer

3
ปัญหาเกี่ยวกับสิ่งนี้คือมันจะพยายามรวมสาขาระยะไกลนั้นกับสาขาปัจจุบันของคุณซึ่งไม่ใช่สาขาระยะไกล (เนื่องจากเป็นสาขาใหม่สำหรับ repo ในพื้นที่ของคุณ)
Z. Khullah

สิ่งนี้จะรวมกับสาขาปัจจุบันของคุณ
Eem Jee

4

หากคุณมีที่เก็บที่ถูกโคลนด้วย--depth 1คำสั่งจำนวนมากที่แสดงรายการจะไม่ทำงาน ตัวอย่างเช่นดูที่นี่

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

ในกรณีนี้ฉันจะ reclone พื้นที่เก็บข้อมูล แต่อาจมีเทคนิคอื่น ๆ เช่นgit ตื้นโคลน (โคลน - ลึก) คิดถึงสาขาระยะไกล


3

หากคุณรู้จักสาขาระยะไกลของคุณอยู่แล้ว ...

git remote
=> One
=> Two

และคุณรู้ชื่อสาขาที่คุณต้องการชำระเงินเช่นbr1.2.3.4จากนั้นทำ

git fetch One
=> returns all meta data of remote, that is, the branch name in question.

สิ่งที่เหลืออยู่ก็คือเช็คสาขา

git checkout br.1.2.3.4

จากนั้นสร้างกิ่งใหม่ออกมา


3

ขั้นตอนมีดังนี้

  1. git fetch originหรือgit fetch --allสิ่งนี้จะดึงข้อมูลรีโมตทั้งหมดไปยังโลคัลของคุณจากนั้นเป็นอ็อพชันที่สองที่คุณสามารถดำเนินการด้วย

  2. git checkout --track origin/<The_remote_branch you want to switch over>

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

git branch

มันจะแสดงสาขาที่คุณกำลังเข้า



2

ตรวจสอบ.git/configไฟล์ของคุณโดยเฉพาะสิ่งที่มีการติดตามในการดึงข้อมูลสำหรับระยะไกลนั้น

[remote "randomRemote"]
    url = git@github.com:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

หากมีการheads/*ชี้ไปที่randomRemote/*เมื่อคุณเรียกใช้git fetch randomRemoteมันจะดึงสาขาทั้งหมด

จากนั้นคุณสามารถชำระเงินที่สาขา

มิฉะนั้น,

  1. คุณต้องเพิ่มสาขาระยะไกลในการติดตามโดยใช้สิ่งนี้ ตรวจสอบของคุณ.git/configหลังจากทำงานนี้ คุณจะเข้าใจ.

    git remote set-branches --add randomRemote randomBranch
    
  2. git fetch randomRemoteวิ่ง สิ่งนี้จะดึงสาขาระยะไกล

  3. git checkout randomBranchตอนนี้คุณสามารถเรียกใช้


1

คุณใช้ 'git pull' เพื่อแยกสาขาของคุณ ฉันจะใช้ที่เก็บจริงและชื่อสาขาเพื่อช่วยเนื่องจาก 'lbranch' และ 'rbranch' ยากต่อการถอดรหัส

มาใช้กัน:

  • myteam.unfuddle.com = เซิร์ฟเวอร์ Git ระยะไกล
  • tlc = แยกบัญชีโครงการที่มีอยู่ในที่เก็บ
  • daves_branch = ชื่อสาขาระยะไกล

    คุณหรือเพื่อนร่วมงานสามารถเรียกใช้สิ่งนี้เพื่อดึงเฉพาะสาขาของคุณไม่ว่าจะมีสาขากี่สาขา:

    git init
    git pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    

  • 0

    คำสั่งง่ายๆgit checkout remote_branch_nameจะช่วยให้คุณสร้างสาขาท้องถิ่นที่มีการเปลี่ยนแปลงทั้งหมดในสาขาระยะไกล


    -2
    git checkout -b branch_name
    git pull remote_name branch_name
    

    3
    ในขณะที่ตัวอย่างนี้อาจตอบคำถามได้ดีกว่าที่จะรวมคำอธิบายบางอย่างเกี่ยวกับสิ่งที่มันทำและวิธีการที่มันแตกต่างจากคำตอบจำนวนมากที่นี่แล้ว
    DaveyDaveDave

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

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