จะดาวน์โหลดสาขาที่มีคอมไพล์ได้อย่างไร?


214

ฉันมีโครงการที่โฮสต์บน GitHub ฉันสร้างสาขาในคอมพิวเตอร์หนึ่งเครื่องจากนั้นผลักการเปลี่ยนแปลงของฉันไปที่ GitHub ด้วย:

git push origin branch-name

ตอนนี้ฉันอยู่ในคอมพิวเตอร์เครื่องอื่นและฉันต้องการดาวน์โหลดสาขานั้น ดังนั้นฉันจึงพยายาม:

git pull origin branch-name

... แต่ทั้งหมดนี้ได้เขียนทับสาขาหลักของฉันด้วยการเปลี่ยนแปลงในสาขาใหม่ของฉัน

ฉันต้องทำอย่างไรเพื่อดึงสาขาระยะไกลของฉันอย่างเหมาะสมโดยไม่ต้องเขียนทับสาขาที่มีอยู่

คำตอบ:


375

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

git checkout -b newlocalbranchname origin/branch-name

หรือคุณสามารถทำ:

git checkout -t origin/branch-name

หลังจะสร้างสาขาที่ตั้งค่าให้ติดตามสาขาระยะไกลด้วย


อัปเดต:เป็นเวลา 5 ปีแล้วที่ฉันโพสต์คำถามนี้เป็นครั้งแรก ฉันได้เรียนรู้อะไรมากมายและคอมไพล์ก็ดีขึ้นตั้งแต่นั้นมา เวิร์กโฟลว์ปกติของฉันแตกต่างไปเล็กน้อยในตอนนี้

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

git pull

สิ่งนี้จะดึงกิ่งระยะไกลทั้งหมดและรวมสาขาปัจจุบัน มันจะแสดงผลลัพธ์ที่มีลักษณะดังนี้:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

my-bugfix-branchตอนนี้รู้เกี่ยวกับคอมไพล์ใหม่ของฉัน หากต้องการเปลี่ยนมาใช้สาขานี้ฉันสามารถเรียกใช้:

git checkout my-bugfix-branch

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


ฉันใช้ GIT 1.7.2.5 git branch --track XX origin/XXและคำสั่งที่ทำงานสำหรับฉันคือ: คำสั่งของคุณทำให้ฉันมีข้อผิดพลาด
dimitarvp

8
หากคุณไม่ได้ดาวน์โหลดสาขาระยะไกลทั้งหมดสิ่งนี้อาจล้มเหลว ทำ "git remote update" เพื่อดึงมันลงมา
Ben Walding

1
จริงๆแล้วมันอาจจะสั้นกว่า "git checkout Branch-name" หากชื่อสาขาเหมือนกันกับสาขาการติดตามระยะไกล (เช่นที่มา / สาขาชื่อ) ก็จะเป็นสาขาการติดตามในท้องถิ่นโดยอัตโนมัติ
DavidN

64

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

คัดลอกที่เก็บที่คุณต้องการดาวน์โหลดรหัส (ในตัวอย่างนี้ฉันเลือกโครงการ LRRestyใน Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

ตรวจสอบสาขาที่คุณใช้ ณ จุดนี้ (ควรเป็นสาขาหลัก):

$ git branch    
* master

ลองดูสาขาที่คุณต้องการในกรณีของฉันมันถูกเรียกว่า 'arcified':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

ยืนยันว่าคุณใช้สาขาที่คุณต้องการ:

$ git branch    
* arcified
  master

หากคุณต้องการอัปเดตรหัสอีกครั้งในภายหลังให้เรียกใช้git pull:

$ git pull
Already up-to-date.

"พวกเขาอาจใช้ Git ในทางที่ผิด" - ไม่นี่เป็นสิ่งที่ถูกต้อง
Big McLargeHuge

28

คุณสามารถใช้ git remote เช่น:

git fetch origin

จากนั้นตั้งค่าสาขาท้องถิ่นเพื่อติดตามสาขาระยะไกลเช่นด้านล่าง:

git branch --track [local-branch-name] origin/remote-branch-name

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

คุณสามารถสลับไปที่ชื่อสาขาท้องถิ่นและเริ่มทำงาน:

git checkout [local-branch-name]

18

คุณสามารถใช้ได้ :

git clone <url> --branch <branch>

เพื่อโคลน / ดาวน์โหลดเฉพาะเนื้อหาของสาขา

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

คำสั่งนี้จะให้เนื้อหาของสาขาโดยตรงแก่คุณ มันใช้งานได้สำหรับฉัน


1
นี่คือคำตอบที่ดีที่สุด ง่ายและมีประสิทธิภาพ
derek

2
สิ่งนี้ไม่ได้ผลสำหรับฉัน มันบอกว่ามีโฟลเดอร์ที่มีชื่อนั้นอยู่ (ซึ่งแน่นอนว่ามีอยู่แล้ว)
Jonathan Tuzman

1
@ Jonathan มันจะไม่ผนวกสาขาใหม่กับสาขาที่คุณมีอยู่ สามารถใช้เพื่อคัดลอกสำเนาใหม่เท่านั้น ฉันไม่เห็นสาเหตุที่ควรมีโฟลเดอร์ที่มีชื่อนั้นอยู่แล้วหากคุณยังไม่ได้โคลนที่เก็บข้อมูลไปแล้ว ลองทำการโคลนที่ตำแหน่งอื่น
Markus เก่า

ไม่ปรับปรุงโครงการที่มีอยู่กับสาขาใหม่
Dazzle

16

นำทางไปยังโฟลเดอร์บนเครื่องใหม่ที่คุณต้องการดาวน์โหลดจาก git บน git bash

ใช้คำสั่งด้านล่างเพื่อดาวน์โหลดรหัสจากสาขาที่คุณต้องการ

git clone 'git ssh url' -b 'Branch Name'

มันจะดาวน์โหลดรหัสสาขาที่เกี่ยวข้อง


9

Git clone และ cd ในชื่อ repo:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

เปลี่ยนเป็นสาขา (หน้า GitHub) ที่ฉันต้องการ:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

และดึงกิ่งก้านสาขา:

$ git pull
Already up-to-date.

LS:

$ ls
index.html      params.json     stylesheets



-8

สร้างไดเรกทอรีใหม่และทำการโคลนแทน

git clone (ที่อยู่ต้นทาง) (ชื่อสาขา)


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