คำสั่งทั้งสองมีผลเหมือนกัน ( ขอบคุณคำตอบของ Robert Siemer ที่ชี้ให้เห็น )
ความแตกต่างในทางปฏิบัติเกิดขึ้นเมื่อใช้สาขาท้องถิ่นที่ชื่อแตกต่างกัน
git checkout -b mybranch origin/abranch
จะสร้างmybranch
และติดตามorigin/abranch
git checkout --track origin/abranch
จะสร้าง ' abranch
' ไม่ใช่สาขาที่มีชื่ออื่น
(นั่นคือตามที่แสดงความเห็นโดยSebastian Grafหากสาขาท้องถิ่นไม่ได้มีอยู่แล้ว
ถ้ามันคุณจะต้องgit checkout -B abranch origin/abranch
)
หมายเหตุ: ด้วย Git 2.23 (Q3 2019) ที่จะใช้คำสั่งใหม่git switch
:
git switch -c <branch> --track <remote>/<branch>
หากสาขามีอยู่ในการควบคุมระยะไกลหลายตัวและหนึ่งในนั้นถูกตั้งชื่อโดยcheckout.defaultRemote
ตัวแปรการกำหนดค่าเราจะใช้สาขานั้นเพื่อจุดประสงค์ในการแก้ความกำกวมแม้ว่าสิ่ง<branch>
นั้นจะไม่ซ้ำกันในการรีโมททั้งหมด
ตั้งค่าเป็นเช่นcheckout.defaultRemote=origin
เพื่อเช็คสาขาระยะไกลจากที่นั่นเสมอหาก<branch>
คลุมเครือ แต่มีอยู่ในรีโมต 'ต้นทาง'
ที่นี่ ' -c
' คือใหม่ ' -b
'
ขั้นแรกให้พื้นหลังบางส่วน: การติดตามหมายความว่าสาขาท้องถิ่นมีการตั้งค่าอัปสตรีมเป็นสาขาระยะไกล:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
จะ:
- สร้าง / การตั้งค่าไปยังจุดอ้างอิงโดย
branch
origin/branch
- สร้างสาขา
branch
(มีgit branch
) origin/branch
และติดตามสาขาที่ห่างไกลการติดตาม
เมื่อสาขาในพื้นที่เริ่มต้นจากสาขาการติดตามระยะไกล Git จะจัดตั้งสาขา (โดยเฉพาะรายการbranch.<name>.remote
และbranch.<name>.merge
การกำหนดค่า)เพื่อที่git pull
จะรวมเข้ากับสาขาการติดตามระยะไกลอย่างเหมาะสม
ลักษณะการทำงานนี้อาจเปลี่ยนแปลงได้ผ่านการbranch.autosetupmerge
ตั้งค่าสถานะส่วนกลาง การตั้งค่าที่สามารถแทนที่ด้วยการใช้--track
และตัวเลือกและการเปลี่ยนแปลงในภายหลังโดยใช้สาขาคอมไพล์--no-track
--set-upstream-to
และgit checkout --track origin/branch
จะทำเช่นเดียวกับgit branch --set-upstream-to
):
# or, since 1.7.0
git branch --set-upstream upstream/branch branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to upstream/branch branch
# the short version remains the same:
git branch -u upstream/branch branch
นอกจากนี้ยังจะตั้งค่าอัปสตรีมสำหรับ ' branch
'
(หมายเหตุ: git1.8.0 จะเลิกใช้แล้วgit branch --set-upstream
แทนที่ด้วยgit branch -u|--set-upstream-to
: ดูgit1.8.0-rc1 ประกาศ )
การลงทะเบียนสาขาต้นน้ำสำหรับสาขาท้องถิ่นจะ:
- บอกคอมไพล์ที่จะแสดงให้เห็นความสัมพันธ์ระหว่างสองสาขาใน
git status
git branch -v
และ
- ชี้นำ
git pull
โดยไม่ขัดแย้งที่จะดึงจากต้นน้ำเมื่อสาขาใหม่จะถูกตรวจสอบจาก
ดูที่ " คุณจะทำให้สาขา git ที่มีอยู่ติดตามสาขาระยะไกลได้อย่างไร " สำหรับข้อมูลเพิ่มเติม
git pull
ในขณะที่บางสาขาจะขอให้รีโมตสาขาดึงออกมา ปรากฎว่าหากคุณในครั้งแรกที่คุณกำลังตรวจสอบสาขาระยะไกลที่เพื่อนของคุณสร้างขึ้น git จะดำเนินการต่อและเพิ่มbranch.<BNAME>.remote=origin
ไปยัง gitconfig ในพื้นที่git pull
ซึ่งจะช่วยให้คุณกับปัญหา อย่างไรก็ตามหากคุณเป็นคนหนึ่งที่สร้างสาขาgit checkout -b BNAME
ดังนั้นก็ไม่รู้จักคอมไพล์แน่นอน ดังนั้นคุณควรระบุระยะไกล