คำสั่งทั้งสองมีผลเหมือนกัน ( ขอบคุณคำตอบของ 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 จะ:
- สร้าง / การตั้งค่าไปยังจุดอ้างอิงโดย
branchorigin/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 statusgit branch -vและ
- ชี้นำ
git pull โดยไม่ขัดแย้งที่จะดึงจากต้นน้ำเมื่อสาขาใหม่จะถูกตรวจสอบจาก
ดูที่ " คุณจะทำให้สาขา git ที่มีอยู่ติดตามสาขาระยะไกลได้อย่างไร " สำหรับข้อมูลเพิ่มเติม
git pullในขณะที่บางสาขาจะขอให้รีโมตสาขาดึงออกมา ปรากฎว่าหากคุณในครั้งแรกที่คุณกำลังตรวจสอบสาขาระยะไกลที่เพื่อนของคุณสร้างขึ้น git จะดำเนินการต่อและเพิ่มbranch.<BNAME>.remote=originไปยัง gitconfig ในพื้นที่git pullซึ่งจะช่วยให้คุณกับปัญหา อย่างไรก็ตามหากคุณเป็นคนหนึ่งที่สร้างสาขาgit checkout -b BNAMEดังนั้นก็ไม่รู้จักคอมไพล์แน่นอน ดังนั้นคุณควรระบุระยะไกล