Bagaimana saya bisa beralih ke cabang lain di git?

222

Yang mana dari baris-baris ini yang benar?

git checkout 'another_branch'

Atau

git checkout origin 'another_branch'

Atau

git checkout origin/'another_branch'

Dan apa perbedaan antara garis-garis ini?


Benyamin Jafari
sumber
32
git checkout [branch]untuk sebagian besar pengguna yang datang ke pertanyaan ini
JGallardo

Jawaban:

225

Jika another_branchsudah ada secara lokal dan Anda tidak berada di cabang ini, kemudian git checkout another_branchberalih ke cabang.

Jika another_branchtidak ada tetapi origin/another_branchtidak ada, maka git checkout another_branchsama dengan git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. Itu untuk membuat another_branchdari origin/another_branchdan ditetapkan origin/another_branchsebagai hulu another_branch.

Jika tidak ada, git checkout another_branchmengembalikan kesalahan.

git checkout origin another_branchmengembalikan kesalahan dalam banyak kasus. Jika originrevisi dan another_branchfile, maka memeriksa file revisi itu tetapi kemungkinan besar bukan itu yang Anda harapkan. originsebagian besar digunakan di git fetch, git pulldan git pushsebagai remote, alias dari url ke repositori jarak jauh.

git checkout origin/another_branchberhasil jika origin/another_branchada. Itu mengarah ke dalam kondisi KEPALA terpisah, bukan pada cabang apa pun. Jika Anda membuat komit baru, komit baru tidak dapat dijangkau dari cabang mana pun yang ada dan tidak ada cabang yang akan diperbarui.

PEMBARUAN :

Seperti 2.23.0 telah dirilis, dengan itu kita juga dapat menggunakan git switchuntuk membuat dan mengganti cabang.

Jika fooada, cobalah untuk beralih ke foo:

git switch foo

Jika footidak ada dan origin/fooada, coba buat foodari origin/foodan kemudian beralih ke foo:

git switch -c foo origin/foo
# or simply
git switch foo

Secara umum, jika footidak ada, coba buat foodari referensi atau komit yang dikenal dan kemudian beralih ke foo:

git switch -c foo <ref>
git switch -c foo <commit>

Jika kami mempertahankan repositori di Gitlab dan Github secara bersamaan, repositori lokal mungkin memiliki dua remote, misalnya, originuntuk Gitlab dan githubuntuk Github. Dalam hal ini repositori memiliki origin/foodan github/foo. git switch fooakan mengeluh fatal: invalid reference: foo, karena tidak diketahui dari mana referensi, origin/fooatau github/foo, untuk membuat foo. Kita perlu menentukannya dengan git switch -c foo origin/fooatau git switch -c foo github/foosesuai kebutuhan. Jika kami ingin membuat cabang dari kedua cabang jarak jauh, lebih baik menggunakan nama pembeda untuk cabang baru:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Jika fooada, cobalah untuk membuat ulang / memaksa-membuat foodari (atau mengatur ulang fooke) referensi atau komit yang diketahui dan kemudian beralih ke foo:

git switch -C foo <ref>
git switch -C foo <commit>

yang setara dengan:

git switch foo
git reset [<ref>|<commit>] --hard

Cobalah untuk beralih ke KEPALA yang terlepas dari referensi atau komit yang diketahui:

git switch -d <ref>
git switch -d <commit>

Jika Anda hanya ingin membuat cabang tetapi tidak beralih, gunakan git branchsaja. Cobalah untuk membuat cabang dari referensi atau komit yang diketahui:

git branch foo <ref>
git branch foo <commit>
ElpieKay
sumber
24
Jawaban ini benar (seperti biasa, dan ditingkatkan), tetapi saya akan menambahkan komentar yang mungkin membantu: git checkoutperintahnya melakukan terlalu banyak hal, menurut saya. Itu sebabnya ada begitu banyak mode operasi di sini. Jika satu-satunya hal yang git checkoutdilakukan adalah beralih cabang, jawabannya akan sederhana, tetapi juga dapat membuat cabang, dan bahkan mengekstrak file dari komit tertentu tanpa berpindah cabang.
torek
11
ini adalah jawaban yang tepat, tetapi menunjukkan bagaimana git agak kacau di baris perintah. git checkout untuk beralih cabang?
thang
3
@thang Yah, dengan rilis 2.23.0, ini diperbaiki: Anda sekarang dapat menggunakan git switchuntuk beralih ke cabang.
legends2k
Switch sepertinya tidak berfungsi untuk versi git ini. Apa yang saya gunakan untuk beralih ke cabang berbeda di versi git ini? C: \ widget> git --version git versi 2.11.0.windows.3 C: \ widget> git switch master git: 'switch' bukan perintah git. Lihat 'git --help'. C: \ widget>
John
1
@John gunakan git checkoutsebagai gantinya untuk versi lama, yang juga berfungsi dalam versi modern.
ElpieKay
66

Beralih ke cabang lain di git. Jawaban langsung,

git-checkout - Beralih cabang atau mengembalikan file pohon yang berfungsi

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Sebelum beralih cabang pastikan Anda tidak memiliki file yang dimodifikasi, dalam hal ini, Anda dapat melakukan perubahan atau Anda dapat menyimpannya.

danglingpointer
sumber
Perintah terakhir membuat saya dalam keadaan KEPALA terlepas. Berarti seseorang tidak dapat mengedit cabang.
2
Cabang yang Anda coba checkout tidak diambil maka Anda harus mengambil sebelum checkout. Anda dapat melewatkan pengambilan jika cabang terbaru, kemudian cukup gunakan git checkout branchname.
danglingpointer
Bukankah cukup untuk melakukan "git pull" setelah beralih ke cabang?
tarik juga ok, tarik lakukan pengambilan dan bergabung bersama di latar belakang. Saya tidak melihat perbedaan.
danglingpointer
17

[ git checkout "branch_name"]

adalah cara lain untuk mengatakan:

[ git checkout -b branch_name origin/branch_name]

dalam kasus "branch_name" hanya ada jarak jauh.

[ git checkout -b branch_name origin/branch_name] berguna jika Anda memiliki beberapa remote.

Mengenai [ git checkout origin 'another_branch'] Saya tidak yakin ini mungkin, AFAK Anda dapat melakukan ini menggunakan perintah "ambil" - [ git fetch origin 'another_branch']

Mehdi
sumber
Saya tahu perintah "git checkout -b branchName" untuk membuat cabang lain. Ini bukan pertanyaannya!
10

Dengan Git 2.23 dan seterusnya, seseorang dapat menggunakan git switch <branch name>untuk berganti cabang.

gkw
sumber
6

Apa yang berhasil untuk saya adalah sebagai berikut:

Beralih ke cabang yang dibutuhkan:

git checkout -b BranchName

Dan kemudian saya menarik "tuan" dengan:

git pull origin master
Karam Qusai
sumber
6

Perintah yang berguna untuk bekerja dalam kehidupan sehari-hari:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch
pola
sumber
5

Jika Anda ingin cabang untuk melacak cabang jarak jauh, yang sangat impor jika Anda akan melakukan perubahan pada cabang dan menarik perubahan dll, Anda perlu menggunakan add -t untuk checkout aktual misalnya: git checkout -t branchname

Matthew Joughin
sumber
4

Periksa: git branch -a

Jika Anda hanya mendapatkan satu cabang. Kemudian lakukan langkah-langkah di bawah ini.

  • Langkah 1 : git config --list
  • Langkah 2 : git config --unset remote.origin.fetch
  • Langkah 3: git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
pavan
sumber
2
Saya bertanya-tanya bagaimana serangkaian perintah ini akan beralih ke cabang lain.
Ini mungkin berguna untuk dilakukan ketika Anda melakukan klon dangkal (menggunakan depthparam) sebelumnya dan sekarang bertanya-tanya mengapa Anda tidak dapat mengambil cabang remote lain untuk mendapatkan error: pathspec 'another_branch' did not match any file(s) known to gitmenggunakan perintah yang disarankan di atas. Tentu saja bukan itu pertanyaan awal tetapi dapat membantu orang lain menggaruk-garuk kepala di sini.
luciash d 'being
0

Saya menggunakan ini untuk memindahkan satu cabang ke cabang lain yang dapat Anda gunakan berfungsi baik untuk saya.

git switch [branchName] ATAU git checkout [branchName]

mis: git switch berkembang ATAU
git checkout berkembang

Rohit Chaurasiya
sumber