Kedua perintah memiliki efek yang sama ( terima kasih atas jawaban Robert Siemer karena menunjukkannya ).
Perbedaan praktis muncul ketika menggunakan cabang lokal yang bernama berbeda :
git checkout -b mybranch origin/abranch
akan membuat mybranch
dan melacakorigin/abranch
git checkout --track origin/abranch
hanya akan membuat ' abranch
', bukan cabang dengan nama yang berbeda.
(Yaitu, seperti dikomentari oleh Sebastian Graf , jika cabang lokal belum ada.
Jika ya, Anda perlu git checkout -B abranch origin/abranch
)
Catatan: dengan Git 2.23 (Q3 2019), itu akan menggunakan perintah barugit switch
:
git switch -c <branch> --track <remote>/<branch>
Jika cabang ada di beberapa jarak jauh dan salah satunya dinamai oleh checkout.defaultRemote
variabel konfigurasi, kami akan menggunakannya untuk tujuan disambiguasi, bahkan jika <branch>
tidak unik di semua jarak jauh.
Setel ke eg checkout.defaultRemote=origin
untuk selalu checkout cabang jarak jauh dari sana jika <branch>
ambigu tetapi ada pada remote 'asal'.
Di sini, ' -c
' adalah yang baru ' -b
'.
Pertama, beberapa latar belakang: Pelacakan berarti bahwa cabang lokal memiliki hulu yang disetel ke cabang jarak jauh:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
akan:
- buat / reset
branch
ke titik yang dirujuk oleh origin/branch
.
- buat cabang
branch
(dengan git branch
) dan lacak cabang pelacakan jarak jauh origin/branch
.
Ketika cabang lokal dimulai dari cabang pelacakan jarak jauh, Git mengatur cabang (khususnya entri konfigurasi branch.<name>.remote
dan branch.<name>.merge
) sehingga git pull
akan bergabung dengan tepat dari cabang pelacakan jarak jauh.
Perilaku ini dapat diubah melalui branch.autosetupmerge
flag konfigurasi global . Pengaturan yang dapat diganti dengan menggunakan --track
dan --no-track
pilihan, dan diubah kemudian menggunakan cabang git --set-upstream-to
.
Dan git checkout --track origin/branch
akan melakukan hal yang sama seperti 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
Ini juga akan mengatur hulu untuk ' branch
'.
(Catatan: git1.8.0 akan usang git branch --set-upstream
dan menggantinya dengan git branch -u|--set-upstream-to
: lihat git1.8.0-rc1 mengumumkan )
Memiliki cabang hulu yang terdaftar untuk cabang lokal akan:
- beri tahu git untuk menunjukkan hubungan antara dua cabang di
git status
dangit branch -v
.
- mengarahkan
git pull
tanpa argumen untuk menarik dari hulu ketika cabang baru diperiksa .
Lihat " Bagaimana Anda membuat cabang git yang ada melacak cabang jarak jauh? " Untuk informasi lebih lanjut.
git pull
, sedangkan beberapa cabang meminta cabang jarak jauh untuk menariknya. Ternyata jika Anda, pertama kali, memeriksa cabang jarak jauh yang dibuat rekan Anda, git melanjutkan dan menambahbranch.<BNAME>.remote=origin
gitconfig lokal. Yang kemudian memungkinkan Anda untuk mengeluarkangit pull
. Namun, jika Anda yang membuat cabanggit checkout -b BNAME
, maka git -dari saja- tidak tahu. Jadi, Anda harus menentukan remote-nya.If <branch>
tidak ditemukan tetapi ada cabang pelacakan di persis satu remote (sebut saja<remote>
) dengan nama yang cocok, perlakukan setara dengan$ git checkout -b <branch> --track <remote>/<branch>
"branch.autoSetupMerge
untukalways
hanya melakukan apa yang kita bicarakan. Pengaturan ini default untuktrue
, yang berarti pelacakan akan dilakukan hanya ketika memeriksa cabang jauh.true
tidak menyiapkan pelacakan untuk cabang yang dibuat secara lokal.Tidak ada perbedaan sama sekali!
1)
git checkout -b branch origin/branch
Jika tidak ada
--track
dan tidak--no-track
,--track
diasumsikan sebagai default. Default dapat diubah dengan pengaturanbranch.autosetupmerge
.Akibatnya, 1) berperilaku seperti
git checkout -b branch --track origin/branch
.2)
git checkout --track origin/branch
"Sebagai kenyamanan",
--track
tanpa-b
menyiratkan-b
dan argumen untuk-b
diduga adalah "cabang". Tebakan didorong oleh variabel konfigurasiremote.origin.fetch
.Akibatnya, 2) berperilaku seperti
git checkout -b branch --track origin/branch
.Seperti yang Anda lihat: tidak ada perbedaan.
Tapi itu menjadi lebih baik:
3)
git checkout branch
juga setara dengan
git checkout -b branch --track origin/branch
jika "cabang" belum ada tetapi "asal / cabang" tidak 1 .Ketiga perintah mengatur "hulu" dari "cabang" menjadi "asal / cabang" (atau gagal).
Hulu digunakan sebagai titik referensi argumen-kurang
git status
,git push
,git merge
dan dengan demikiangit pull
(jika dikonfigurasi seperti itu (yang merupakan default atau hampir default)).Misalnya
git status
memberitahu Anda seberapa jauh di belakang atau di depan Anda hulu, jika ada yang dikonfigurasi.git push
dikonfigurasikan untuk mendorong cabang saat ini ke atas secara default 2 sejak git 2.0.1 ... dan jika "asal" adalah satu-satunya remote yang memiliki "cabang"
2 default (bernama "sederhana") juga memberlakukan untuk kedua nama cabang menjadi sama
sumber
Buku ini tampaknya menunjukkan bahwa perintah-perintah itu menghasilkan efek yang sama:
Itu sangat berguna ketika penyelesaian bash atau oh-my-zsh git Anda dapat menarik
origin/serverfix
nama untuk Anda - cukup tambahkan--track
(atau-t
) dan Anda sedang dalam perjalanan.sumber
Anda tidak dapat membuat cabang baru dengan perintah ini
jika Anda memiliki perubahan yang tidak dipentaskan.
Berikut ini contohnya:
Namun Anda dapat dengan mudah membuat cabang baru dengan perubahan yang tidak dipentaskan dengan
git checkout -b
perintah:sumber
origin/branch
)origin/new-branch
alih - alihorigin/branch
. Apakah Anda sadar akan hal itu?