Git checkout: memperbarui jalur tidak kompatibel dengan berpindah cabang


467

Masalah saya terkait dengan kesalahan Fatal Git saat berpindah cabang .

Saya mencoba mengambil cabang jauh dengan perintah

git checkout -b local-name origin/remote-name

tapi saya mendapatkan pesan kesalahan ini:

fatal: git checkout: jalur pembaruan tidak kompatibel dengan beralih cabang.
Apakah Anda bermaksud untuk checkout 'asal / nama-jauh' yang tidak dapat diselesaikan sebagai komit?

Jika saya secara manual membuat cabang dan kemudian menarik cabang jarak jauh, itu berfungsi, sama seperti membuat klon baru dan memeriksa cabang keluar.

Mengapa itu tidak bekerja di repositori tempat saya bekerja?


1
apa yang telah berubah sejak instance pertama dari perintah itu (memicu pesan kesalahan)?
VonC

git init git ambil git ambil git: //blabla.com/dir1/Project.git

Jawaban:


739

Saya percaya ini terjadi ketika Anda mencoba untuk checkout cabang jarak jauh yang belum diketahui oleh git repo lokal Anda. Mencoba:

git remote show origin

Jika cabang jarak jauh yang ingin Anda checkout ada di bawah "Cabang jarak jauh baru" dan bukan "Cabang jarak jauh terlacak" maka Anda harus mengambilnya terlebih dahulu:

git remote update
git fetch

Sekarang seharusnya berfungsi:

git checkout -b local-name origin/remote-name

7
Ini memecahkan masalah bagi saya, bukan jawaban sewenang-wenang di atas.
Jessedc

21
Itu seharusnya "git fetch REPOSITORY_NAME" untuk mendapatkan semua cabang di repositori itu.
Mike Thomsen

1
belum tentu. git fetchakan mendapatkan semua cabang dari semua repo jarak jauh.
Michael Grinich

4
Jika ada orang lain yang berjuang dengan kegilaan total dari semua ini: git fetch origin / branchname Tidak sama dengan git fetch. Yang pertama hanya menghasilkan "baru (pengambilan berikutnya akan disimpan di remote / asal)" ditampilkan dalam kolom yang terlihat melalui git remote show origin.
Alexander Kellett

7
Jika Anda mencoba melakukan ini untuk remote yang Anda tambahkan secara eksplisit (jadi apa pun selain asal ) Anda harus melakukan git remote updatesebelum mengambil Anda akan mengambil remote itu. Kalau tidak, Anda mendapatkan pesan seperti Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Tolong tambahkan ini ke jawaban dan hemat orang berjam-jam membaca jawaban yang sama yang hanya bekerja untuk asal.
Bruno Bronosky

150

Sintaks alternatif,

git fetch origin remote_branch_name:local_branch_name

12
Ini berhasil untuk saya. Nama cabang jarak jauh saya bukan asal. Saya tidak tahu apakah itu membuat perbedaan karena saya minum vodka.
Rimian

13
Ini bukan hanya sintaks alternatif, tetapi dapat bekerja saat git checkout -b branch_name origin / branch_name tidak berfungsi
codercake

1
Ini juga memperbaiki masalah saya ketika menjalankan "git checkout --track origin / remote-branch", yang awalnya memberikan kesalahan yang sama dengan OP sebelum perbaikan. Terima kasih!
kakyo

1
Bekerja untuk saya setelah menjalankan juga jawaban yang divalidasi.
AsTeR

2
Ya, saya menduga --depthkualifikasi untuk klon asli mungkin salah di sini. Saya berhasil dengan git fetch remote_branch_name:local_branch_nametetapi semua saran lainnya gagal.
John Kelleher

46

Setelah mencoba sebagian besar dari apa yang bisa saya baca di utas ini tanpa hasil, saya menemukan yang satu ini: Cabang yang jauh tidak muncul di "git branch -r"

Ternyata file .git / config saya salah. Setelah melakukan perbaikan sederhana semua cabang muncul.

Pergi dari

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

untuk

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Lakukan triknya


4
Itu memang konfigurasi yang aneh. Ia memberitahu git untuk hanya mengambil cabang master dari remote.
Ikke

3
Saya akan memilihnya 10 kali jika saya bisa! - ini sepertinya beberapa hal yang dilakukan git baru ketika kloning
mpapis

2
Saya memiliki masalah yang sama, itu membuat saya gila. Siapa pun yang tidak melihat cabang terpencil, silakan periksa ini !!
Carlos Granados

Terima kasih Tuhan atas jawaban Anda :)
Sacha

Pikiran = meledak! Terima kasih!
Chiranjib

12

Tidak yakin apakah ini bermanfaat atau persis relevan dengan pertanyaan Anda, tetapi jika Anda mencoba mengambil dan checkout hanya satu cabang dari repositori jarak jauh, maka perintah git berikut akan melakukan trik:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

tidak satu pun di atas bekerja untuk saya. Situasi saya sedikit berbeda, cabang jarak jauh saya tidak asal . tetapi dalam repositori yang berbeda.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

tip: jika Anda tidak melihat cabang jarak jauh di output berikut git branch -v -atidak ada cara untuk memeriksanya.

Dikonfirmasi bekerja pada 1.7.5.4


ARF, sadari VirtualStaticVoid punya solusi yang sama!
Olivier Refalo

+1 untuk git branch -v -a: Saya memiliki kendali jarak jauh yang salah yang mengatakan fetch = +refs/heads/*:refs/remotes/master/*meskipun jarak itu dipanggil upstream.
keflavich

7

Bagi saya yang berhasil adalah:

git fetch

Yang menarik semua referensi ke mesin Anda untuk semua cabang di remote. Lalu aku bisa melakukannya

git checkout <branchname>

dan itu bekerja dengan sempurna. Mirip dengan jawaban terpilih teratas, tetapi sedikit lebih sederhana.


4

Saya curiga tidak ada cabang jarak jauh bernama remote-name, tetapi Anda tidak sengaja membuat cabang lokal bernama origin / remote-name.

Apakah mungkin Anda pada suatu saat mengetik:

asal git cabang / nama-jauh

Jadi membuat cabang lokal bernama asal / nama-jauh? Ketikkan perintah ini:

git checkout asal / nama-jauh

Anda akan melihat:

Beralih ke cabang "asal / nama jauh"

yang berarti itu benar-benar cabang lokal yang salah nama, atau

Catatan: pindah ke "origin / rework-isscoring" yang bukan cabang lokal
Jika Anda ingin membuat cabang baru dari checkout ini, Anda dapat melakukannya
(sekarang atau nanti) dengan menggunakan -b dengan perintah checkout lagi. Contoh:
  git checkout -b 

yang berarti itu benar-benar cabang jarak jauh.


3

Ini tidak terlalu intuitif tetapi ini bekerja dengan baik untuk saya ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

LALU jalankan perintah git branch --track ...

  git branch --track $BRANCH origin/$BRANCH

2

Bagi saya, saya memiliki kesalahan ketik dan cabang jarak jauh saya tidak ada

Gunakan git branch -auntuk membuat daftar cabang jarak jauh


1

Bisakah masalah Anda ditautkan dengan pertanyaan SO "masalah checkout" lainnya ini ?

yaitu: masalah yang terkait dengan:

  • versi lama dari Git
  • sintaks checkout yang aneh, yang seharusnya :, git checkout -b [<new_branch>] [<start_point>]dengan [<start_point>]merujuk pada nama komit untuk memulai cabang baru, dan 'origin/remote-name'bukan itu.
    (padahal git branchmemang mendukung start_point menjadi nama cabang jarak jauh)

Catatan: apa yang dikatakan skrip checkout.sh adalah:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Ini seperti sintaks git checkout -b [] [remote_branch_name] mengubah nama cabang dan mengatur ulang titik awal baru dari cabang baru, yang dianggap tidak kompatibel.


Masalah terpecahkan. git checkout -b nama lokal remote / remote-branch benar-benar berfungsi
Ikke

1
Menarik, apa yang telah berubah sejak perintah pertama dari perintah itu (memicu pesan kesalahan)?
VonC

1

Setelah mengambil jutaan kali masih menambahkan remote tidak muncul, meskipun gumpalan berada di kolam renang. Ternyata opsi --tags tidak boleh diberikan git remote adduntuk alasan apa pun. Anda dapat menghapusnya secara manual dari .git / config untuk membuat git fetch buat referensi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.