“Tidak dapat memperbarui jalur dan beralih ke cabang pada saat yang sama”

186

Saya terkadang menggunakan checkout -bopsi untuk membuat cabang baru, memeriksanya secara bersamaan dan mengatur pelacakan dalam satu perintah.

Di lingkungan baru, saya mendapatkan kesalahan ini:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Mengapa Git tidak menyukainya? Ini digunakan untuk bekerja dengan repo yang sama.

indah
sumber
6
Pesan kesalahan memberi tahu Anda bahwa origin/masteritu bukan ID komit, yaitu, bukan cabang jarak jauh yang valid. Apakah itu muncul dalam git branch -routput?
torek
Tidak. Ternyata saya tidak memeriksa semua cabang jarak jauh selama klon.
Marekful

Jawaban:

199

' origin/master' yang tidak bisa diselesaikan sebagai komit

Aneh: Anda perlu memeriksa remote Anda:

git remote -v

Dan pastikan origindiambil:

git fetch origin

Kemudian:

git branch -avv

(untuk melihat apakah Anda telah mengambil origin/mastercabang)

Akhirnya, gunakan git switchalih-alih yang membingungkangit checkout , dengan Git 2.23+ (Agustus 2019).

git switch -c test --track origin/master
VONC
sumber
11
Saya memiliki kesalahan ketik pada perintah saya yang memicu kesalahan ini; Saya tidak mengeja remote saya dengan benar!
qix
2
Itu adalah cabang baru dan repositori lokal saya tidak mengetahuinya. Saya harus melakukan pulldan kemudian perintah ini berhasil.
coding_idiot
2
Jawaban ini sangat membantu karena itu menunjukkan kepada saya bahwa benar-benar ada sesuatu yang aneh terjadi: Remote diatur dengan benar, tetapi cabang jarak jauh yang baru tidak diambil. Ketika saya mengkloning remote di direktori bersih, itu berfungsi. Mungkinkah .gitdirektori saya rusak?
Konrad Rudolph
git remote -v mengembalikan kesalahan ini fatal: Bukan nama objek yang valid: 'remote'.
Karim Samir
@KarimSamir Anda dapat mengajukan pertanyaan terpisah (dengan OS dan versi git Anda), seperti yang git remote -vdieksekusi dalam git repo tidak berfungsi.
VonC
79

FWIW: Jika Anda memiliki kesalahan ketik pada branchname Anda, Anda akan mendapatkan kesalahan yang sama.

Ludder
sumber
4
Sebenarnya akan lebih baik jika seseorang dapat meluangkan waktu untuk memberi tahu pengembang Git tentang hal ini, pesan kesalahannya tidak terlalu informatif;)
Scorchio
8
ya, ini masalah saya, saya punya tempat di nama cabang saya
Karim Samir
Sama di sini, saya mencoba git checkout -b origin mybranchalih-alih git checkout -b mybranch(tambahan origin)
Guillaume Renoult
Saya menyalin-menempelkan nama cabang saya dan mengikuti spasi setelah nama cabang yang menyebabkan kesalahan ini.
learningKnight
Aku mencoba untuk checkout orgin/my-branchbukan origin/my-branch. Melewatkan satu i& aku terus menggaruk kepalaku untuk sementara waktu untuk memahami mengapa seorang sekutu lama menolak untuk bergaul Typo memang masalahnya.
DDM
55

Anda bisa mendapatkan kesalahan ini dalam konteks, misalnya membangun Travis yang, secara default, memeriksa kode git clone --depth=50 --branch=master. Sepengetahuan saya, Anda dapat mengontrol --depthvia .travis.ymltetapi bukan --branch. Karena itu menghasilkan hanya satu cabang yang dilacak oleh remote, Anda perlu memperbarui remote secara mandiri untuk melacak referensi remote yang diinginkan.

Sebelum:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Cara mengatasinya:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Setelah:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
Bob Aman
sumber
5
Memecahkannya untukku. Saya menggunakan klon --depth = 1 dangkal dan ini adalah apa yang saya butuhkan untuk berganti cabang.
Sawtaytoes
1
Gah ya, kedalamannya pasti menghasilkan kesalahan ini! Jika memungkinkan, saya menyarankan agar beberapa kalimat pertama diedit untuk menekankan hal yang mendalam.
Dubslow
19

Hal sederhana ini berhasil untuk saya!

Jika dikatakan tidak bisa melakukan 2 hal sekaligus, pisahkan.

git branch branch_name origin/branch_name 

git checkout branch_name
Ashwini Reddy
sumber
Mudah untuk mencari tahu apa masalah sebenarnya
Z. Khullah
9

Anda dapat mengikuti langkah-langkah ini ketika menemukan masalah ini:

  1. Jalankan perintah berikut untuk membuat daftar cabang yang dikenal untuk repositori lokal Anda.

git menunjukkan asal remote

yang menghasilkan ini:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Setelah memverifikasi detail seperti (ambil URL, dll), jalankan perintah ini untuk mengambil cabang baru (yaitu yang Anda mungkin ingin checkout di repo lokal Anda) yang ada di remote tetapi tidak di lokal Anda.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Seperti yang Anda lihat, cabang baru diambil dari jarak jauh.
3. Terakhir, checkout cabang dengan perintah ini

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Tidak perlu secara eksplisit memberitahu Git untuk melacak (menggunakan --track ) cabang dengan remote.

Perintah di atas akan mengatur cabang lokal untuk melacak cabang jarak jauh dari asal.

ssasi
sumber
4

Jika Anda mendapat ruang putih di cabang Anda maka Anda akan mendapatkan kesalahan ini.

dansek
sumber
1

Bagi saya, saya perlu menambahkan remote:

git remote -add myRemoteName('origin' in your case) remoteGitURL

maka saya bisa mengambil

git fetch myRemoteName
Tanpa Rayuan
sumber
1

Itu disebabkan oleh bahwa cabang lokal Anda tidak melacak cabang jarak jauh. Seperti kata ssasi, Anda perlu menggunakan perintah ini:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Saya memecahkan masalah saya sekarang ....

pertanyaan King
sumber
0

Pertama, Anda perlu Fetchremote (cabang tertentu), kemudian Anda dapat membuat br lokal dan melacaknya dengan cabang remote menggunakan perintah Anda (yaitu checkoutdengan -b dan --track).

Raheel Hasan
sumber
0

Anda harus pergi direktori submodule dan jalankan git status.

Anda mungkin melihat banyak file dihapus. Anda bisa lari

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles adalah nama Anda

  5. git submoudle add ....

knight2016
sumber
0

Anda dapat menggunakan perintah ini: git remote update, git fetch, git checkout -b branch_nameSebuah asal: branch_nameB

Saya pikir mungkin itu karena cabang lokal Anda tidak dapat melacak cabang jarak jauh

kang
sumber