Inilah jawaban panjangnya.
Remote:
Jika Anda menggunakan Git secara kolaboratif, Anda mungkin perlu menyinkronkan komit Anda dengan mesin atau lokasi lain. Setiap mesin atau lokasi disebut remote , dalam terminologi Git, dan masing-masing mungkin memiliki satu atau lebih cabang. Paling sering, Anda hanya akan memilikinya, bernama origin
. Untuk daftar semua remote, jalankan git remote
:
$ git remote
bitbucket
origin
Anda dapat melihat lokasi mana nama-nama remote ini merupakan jalan pintas, dengan menjalankan git remote -v
:
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
Setiap remote memiliki direktori di bawah git/refs/remotes/
:
$ ls -F .git/refs/remotes/
bitbucket/ origin/
Cabang di mesin Anda:
TLDR: pada mesin lokal Anda, Anda memiliki tiga jenis cabang: cabang non-pelacakan lokal, cabang pelacakan lokal, dan cabang pelacakan jarak jauh. Pada mesin jarak jauh, Anda hanya punya satu jenis cabang.
1. Cabang lokal
Anda dapat melihat daftar semua cabang lokal di mesin Anda dengan menjalankan git branch
:
$ git branch
master
new-feature
Setiap cabang lokal memiliki file di bawah .git/refs/heads/
:
$ ls -F .git/refs/heads/
master new-feature
Ada dua jenis cabang lokal pada mesin Anda: cabang lokal non-pelacakan, dan pelacakan cabang lokal.
1.1 Cabang lokal yang tidak terlacak
Cabang lokal yang tidak terlacak tidak terkait dengan cabang lainnya. Anda membuatnya dengan menjalankan git branch <branchname>
.
1.2. Melacak cabang lokal
Pelacakan cabang lokal dikaitkan dengan cabang lain, biasanya cabang pelacakan jarak jauh. Anda membuatnya dengan menjalankan git branch --track <branchname> [<start-point>]
.
Anda dapat melihat mana salah satu cabang lokal Anda melacak cabang menggunakan git branch -vv
:
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
Dari output perintah ini, Anda dapat melihat bahwa cabang lokal master
melacak cabang pelacakan jarak jauh origin/master
, dan cabang lokal new-feature
tidak melacak apa pun.
Cara lain untuk melihat cabang mana yang melacak cabang adalah dengan melihat .git/config
.
Melacak cabang lokal berguna. Mereka memungkinkan Anda untuk menjalankan git pull
dan git push
, tanpa menentukan cabang upstream mana yang akan digunakan. Jika cabang tidak diatur untuk melacak cabang lain, Anda akan mendapatkan kesalahan seperti ini:
$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream new-feature <remote>/<branch>
2. Cabang pelacak jarak jauh (masih di mesin Anda)
Anda dapat melihat daftar semua cabang pelacakan jarak jauh di mesin Anda dengan menjalankan git branch -r
:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
Setiap cabang pelacak jarak jauh memiliki file di bawah .git/refs/<remote>/
:
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
Pikirkan cabang pelacakan jarak jauh Anda sebagai cache lokal Anda untuk apa yang berisi mesin-mesin jarak jauh. Anda dapat memperbarui cabang pelacakan jarak jauh menggunakan git fetch
, yang git pull
menggunakan di belakang layar.
Meskipun semua data untuk cabang pelacak jarak jauh disimpan secara lokal di mesin Anda (seperti cache), itu masih tidak pernah disebut cabang lokal. (Setidaknya, saya tidak akan menyebutnya begitu!) Itu hanya disebut cabang pelacakan jarak jauh.
Cabang-cabang pada mesin jarak jauh:
Anda dapat melihat semua cabang jarak jauh (yaitu cabang di mesin jarak jauh), dengan menjalankan git remote show <remote>
:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com:Flimm/example.git
HEAD branch: master
Remote branches:
io-socket-ip new (next fetch will store in remotes/origin)
master tracked
new-branch tracked
Local ref configured for 'git pull':
master merges with remote master
new-branch merges with remote new-branch
Local ref configured for 'git push':
master pushes to master (up to date)
new-branch pushes to new-branch (fast-forwardable)
git remote
Perintah ini menanyakan mesin jarak jauh melalui jaringan tentang cabangnya. Itu tidak memperbarui cabang pelacakan jarak jauh pada mesin lokal Anda, gunakan git fetch
atau git pull
untuk itu.
Dari output, Anda dapat melihat semua cabang yang ada di mesin jarak jauh dengan melihat di bawah judul "Cabang jarak jauh" (abaikan garis yang ditandai sebagai "basi").
Jika Anda bisa masuk ke mesin remote dan menemukan repositori di sistem file, Anda bisa melihat semua cabangnya di bawah refs/heads/
.
Contekan:
Untuk menghapus cabang lokal, baik pelacakan atau non-pelacakan, dengan aman:
git branch -d <branchname>
Untuk menghapus cabang lokal, baik pelacakan atau non-pelacakan, dengan paksa:
git branch -D <branchname>
Untuk menghapus cabang pelacakan jarak jauh:
git branch -rd <remote>/<branchname>
Untuk membuat cabang non-pelacakan lokal baru:
git branch <branchname> [<start-point>]
Untuk membuat cabang pelacakan lokal baru: (Perhatikan bahwa jika <start-point>
ditentukan dan merupakan cabang pelacakan jarak jauh seperti origin/foobar
, maka --track
flag tersebut secara otomatis disertakan)
git branch --track <branchname> [<start-point]
Contoh:
git branch --track hello-kitty origin/hello-kitty
Untuk menghapus cabang pada mesin jarak jauh:
git push --delete <remote> <branchname>
Untuk menghapus semua cabang pelacakan jarak jauh yang sudah basi, yaitu cabang-cabang yang terkait pada mesin jarak jauh tidak ada lagi:
git remote prune <remote>
Anda mungkin telah memperhatikan bahwa dalam beberapa perintah, Anda menggunakan <remote>/<branch>
, dan perintah lain,<remote> <branch>
,. Contoh: git branch origin/hello-kitty
dan git push --delete origin hello-kitty
.
Ini mungkin tampak sewenang-wenang, tetapi ada cara sederhana untuk mengingat kapan harus menggunakan garis miring dan kapan harus menggunakan spasi. Saat Anda menggunakan garis miring, Anda merujuk ke cabang pelacak jarak jauh pada mesin Anda sendiri, sedangkan saat Anda menggunakan spasi, Anda sebenarnya berurusan dengan cabang pada mesin jarak jauh melalui jaringan.