Tidak dapat mendorong ke cabang jarak jauh, tidak dapat diselesaikan ke cabang

110

Saya memigrasi repo saya dari Bitbucket atau Github. Saya tidak berpikir ini penting tetapi itu satu-satunya hal yang berbeda ... Untuk sementara saya mengatur dua remote:

origin: bitbucket
github: github

Kemudian saya menghapus keduanya dan menunjukkan asal ke github:

git remote remove origin
git remote remove github
git remote add origin https://github....

Uji coba cabang pengembangan:

git push origin develop

Semuanya terbaru, oke, bagus.

Buat cabang baru untuk beberapa pekerjaan seperti biasa:

git checkout -b Feature/Name

Perbarui satu atau dua file. Mencoba mendorong ke jarak jauh:

git push origin Feature/Name

Ini menghasilkan kesalahan:

fatal: Fitur / Nama tidak dapat diselesaikan ke cabang

Cari secara online untuk masalah ini, temukan beberapa hal tentang memastikan HEAD benar, yang lain tentang memastikan saya mendapatkan kasus nama cabang saya dengan benar (meskipun, pada titik ini cabang belum ada di remote). Tidak dapat menyelesaikan.

Jalankan perintah ini:

git push --all -u

Ini membuat Feature/Namecabang saya ke github, tetapi masih melihat perilaku yang sama seperti sebelumnya:

git push origin develop
git push origin Feature/Name

Pekerjaan pertama, yang kedua menampilkan kesalahan yang sama.

Saya tidak tahu mengapa saya mendapatkan kesalahan ini. Ada ide?

jleach
sumber
1
Di cabang mana Anda berada saat Anda membuatnya Feature/Name? Apakah Anda yakin Feature/Name ada dan itu adalah cabang yang diperiksa? Periksa dengan git branch.
Schwern
@Schwern - Hanya ada tiga cabang (lokal dan remote): mengembangkan, menguji dan menguasai. Setelah cabang dibersihkan dan digabungkan kembali untuk dikembangkan, saya menghapusnya secara lokal (dan dari jarak jauh jika berlaku). Saya yakin hanya ada tiga saya - saya sudah lama tidak membuka proyek dan hal pertama yang saya lakukan adalah memeriksa dan memastikan tidak ada cabang yang lepas.
jleach
Apakah itu berarti Anda berlari git branchuntuk memverifikasi Feature/Namekeberadaan secara lokal? Jangan percaya GUI atau IDE. Juga, apakah kasusnya benar?
Schwern
Bagaimana dengan git push origin Feature/Name:Feature/Name?
ElpieKay
Sekarang saya kesal ... tidak yakin mengapa itu tidak berhasil di tempat pertama, tetapi setelah menggunakan git push --all -usaya memiliki cabang baru di github, tetapi masih tidak bisa mendorong dari lokal, bukan? Inilah yang terjadi dengan itu ... nama cabang sebenarnya SQLMigration/ReportFixesdan apa yang ada di github SqlMigration/ReportFixes. Jadi, sekarang saya bisa git push origin SqlMigration/ReportFixes- kenapa github mengganti casing untuk saya? Agh.
jleach

Jawaban:

379

Saya mengalami masalah ini juga, dan itu membuat saya gila. Saya memiliki sesuatu seperti feature/nametetapi git branch -amenunjukkan kepada saya FEATURE/name. Mengganti nama cabang, menghapus dan membuatnya kembali, tidak ada yang berhasil. Apa yang akhirnya memperbaikinya:

Pergi ke .git/refs/heads

Anda akan melihat FEATUREfolder. Ubah namanya menjadi feature.

Ty Le
sumber
4
Ini adalah jawaban yang benar untuk saya. Menggunakan gitbash di windows, dan telah membuat feature / some-feature dan Feature / some-feature.
Dylan McCurry
Ini harus ditandai sebagai jawaban yang benar. Membantu saya. Terima kasih!
GuiDoody
21
Aku berhutang budi padamu untuk jawaban ini! : D
Vojta
1
Wow, tangkapan yang bagus. Menyelamatkan saya banyak waktu. Terima kasih!
Piyush
2
@Pegues - selesai. Saya tidak berpikir jawaban ini ada sampai lama setelah saya memiliki masalah, tetapi tampaknya menjadi yang populer, jadi begitulah.
jleach
30

Berdasarkan pengujian saya sendiri dan komentar OP , saya pikir pada titik tertentu mereka melakukan kesalahan pada casing nama cabang.

Pertama, saya yakin OP ada pada sistem operasi case insensitive seperti OS X atau Windows. Kemudian mereka melakukan sesuatu seperti ini ...

$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'

$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.

Perhatikan perbedaan casing. Perhatikan juga kesalahannya sangat berbeda dengan jika Anda hanya salah ketik nama.

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to '[email protected]:schwern/testing123.git'

Karena Github menggunakan sistem berkas untuk menyimpan nama cabang, Github mencoba untuk membukanya .git/refs/heads/SqlMigration/ReportFixes. Karena filesystem peka huruf besar kecil, maka ia berhasil dibuka .git/refs/heads/SqlMigration/ReportFixestetapi menjadi bingung ketika mencoba membandingkan nama cabang secara case-sensitive dan mereka tidak cocok.

Bagaimana mereka masuk ke negara bagian di mana cabang lokal berada SQLMigration/ReportFixesdan cabang jarak jauh SqlMigration/ReportFixessaya tidak yakin. Saya tidak percaya Github mengacaukan nama cabang jarak jauh. Penjelasan paling sederhana adalah orang lain dengan akses push mengubah nama cabang jarak jauh. Jika tidak, pada titik tertentu mereka melakukan sesuatu yang berhasil membuat remote dengan kesalahan ketik. Jika mereka memeriksa riwayat shell mereka, mungkin dengan history | grep -i sqlmigration/reportfixesmereka mungkin dapat menemukan perintah di mana mereka salah mengetik casing.

Schwern
sumber
Saya mengalami masalah ini ketika saya mengubah kasus karakter dalam nama cabang di OS X. Menggantinya kembali menyelesaikan masalah.
Steven C. Howell
Ini juga bisa terjadi jika Anda memiliki cabang sebelumnya, katakan AM-xxx / some_branch, dan kemudian buat satu lagi AM-XXX / another_branch, git akan mengizinkan kasus yang berbeda secara lokal dan gagal memasangkan keduanya dari jarak jauh.
timpwbaker
Ya itu mungkin untuk check-out dalam kasus campuran yang salah tetapi tidak check-in .. Hanya berantakan.
javadba
12

Git akan membiarkan Anda memeriksa cabang saat ini dengan casing yang berbeda, dan itu akan gagal menemukan referensi di remote.

Baru saja menemukan cara yang sulit.

moggers
sumber
1
ini adalah masalah saya. Saya akan menyarankan untuk melakukan cepat > git branchdan memverifikasi bahwa cabang Anda memiliki * di sebelahnya.
Andy Danger Gagne
Ini terjadi pada saya juga. @AndyDangerGagne, saya senang Anda menyarankan ini - tidak ada * di sebelah cabang tempat saya berada, jadi saya memeriksanya lagi, kali ini dalam huruf kecil.
Cognitiaclaeves
9

Hal serupa terjadi pada saya. Saya membuat cabang yang disebut sesuatu seperti "Feat / name". Saya mencoba mendorongnya menggunakan:

git push --set-upstream origin Feat / name

Saya mendapat kesalahan fatal yang sama seperti Anda:

fatal: Feat / name tidak dapat diselesaikan ke cabang

Untuk mengatasinya saya membuat cabang baru karena saya hanya memiliki sedikit file yang terkena dampak. Kemudian saya mendaftarkan cabang saya untuk menghapus yang salah dan itu ditampilkan tanpa batas:

  • feat / name

Saya telah menggunakan topi sebelumnya tetapi tidak pernah menggunakan karakter pertama. Sepertinya git tidak menyukainya ...

JGL
sumber
Saya memiliki kasus yang sama THX: D
abdoutelb
5

Ini peka huruf besar / kecil, pastikan saja yang dibuat cabang dan dorong ke cabang keduanya dalam modal yang sama.

Contoh:

git checkout -b "TASK-135-hello-world"

SALAH cara melakukannya:

git push origin task-135-hello-world     #FATAL: task-135-hello-world cannot be resolved to branch

Cara melakukan yang BENAR :

git push origin TASK-135-hello-world
Sher
sumber
2

Mungkin Anda lupa menjalankan git fetch? itu diperlukan untuk mengambil data dari repo jarak jauh! Coba larigit fetch remote/branch

pelawak
sumber
2

Untuk kasus saya, saya dulu memiliki folder cabang (atau apapun namanya) dengan huruf kapital, kemudian saya membuat yang baru dengan perbedaan casing (huruf kecil) tetapi git sebenarnya membuat cabang dengan huruf kapital.

Saya telah membuat cabang seperti feature-ABC/branch1sebelumnya dan mendorongnya. Kemudian saya membuat cabang feature-abc/branch2(perhatikan ABC huruf kecil), dan mencoba mendorongnya ke penggunaan jarak jauh git push --set-upstream origin feature-abc/branch2dan mendapatkan kesalahan 'tidak dapat diselesaikan ke cabang'. Jadi saya git branchdan melihat bahwa itu benar-benar dibuat, feature-ABC/branch2bukan feature-abc/branch1untuk saya. Saya checkout lagi dengan git checkout feature-ABC/feature2dan mendorongnya menggunakan huruf besar ( feature-ABC/feature2) untuk menyelesaikannya.

Vee Trairattanapa
sumber
2

Saya menghadapi masalah yang sama yang karena pergi ke cabang dengan casing yang salah. git biarkan saya beralih ke cabang dengan casing yang salah, feature/Namebukan feature/name. Menemukan solusi yang lebih mudah daripada yang tercantum di atas hanya:

  • lakukan perubahan Anda pada 'fitur / Nama'
  • git checkout master (or develop)
  • git checkout feature/name <dengan casing yang benar
  • git push
Corbin Hudson
sumber
2

Saya menyelesaikan ini di Windows 10 dengan menggunakan cmd, bukan GitBash .

Ini ada hubungannya dengan kasus karakter dan bagaimana git dan baris perintah menanganinya.

jmojico.dll
sumber
1

Anda mungkin telah membuat cabang yang serupa tetapi berbeda dalam hal case-sensitive, maka Anda harus menjalankan:

git branch -D <name-of-different-case-branch>

lalu coba dorong lagi.

loko
sumber
1

Jawaban @Ty Le yang sedikit diubah:

tidak ada perubahan dalam file yang diperlukan untuk saya - Saya memiliki cabang bernama 'Fitur / ...' dan saat mendorong ke atas, saya mengubah judul menjadi 'fitur / ...' (kasus huruf pertama diubah ke yang lebih rendah ).

ryzhman
sumber
0

Saya baru saja mengalami masalah ini juga dan cabang normal saya dimulai pb-3.1-12345/namebranchtetapi saya tidak sengaja menggunakan huruf besar pada 2 huruf pertama PB-3.1/12345/namebranch. Setelah mengganti nama cabang untuk menggunakan huruf kecil, saya bisa membuat cabang.

Peter Boomsma
sumber
0

bagi saya, saya menamai cabang sebagai

Rel4.6 / bug / Some-short-description

yang harus saya lakukan adalah saat menggunakan

git push origin R elx.x / bug / Some-short-description

untuk menulis

git push origin r elx.x / bug / Some-short-description

seperti yang saya biasa membuat cabang menggunakan huruf kecil r di rel.

jadi, apa yang menyebabkan masalah ini?

ketika saya membuat daftar .git/refs/headskonten yang saya temukan

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

tapi tidak Relx.x!

dan di dalamnya bugdan di dalam bugnama cabang saya.

Jadi, git coba buat dir dengan nama yang sama tetapi huruf kapital yang berbeda

tetapi sistem tidak peka huruf besar / kecil.

Itulah yang menyebabkan masalah ini!

KhogaEslam
sumber
0

Punya masalah yang sama dengan casing yang berbeda.

Apakah checkout untuk pengembangan (atau master) kemudian mengubah nama (nama yang salah) menjadi sesuatu yang lain seperti test.

  • pengembangan git checkout
  • git branch -m kesalahan nama test

lalu ubah nama kembali ke nama yang benar

  • git branch -m uji nama kanan

lalu checkout ke cabang nama kanan

  • nama kanan git checkout

kemudian bekerja untuk mendorong ke cabang jarak jauh

  • git push origin right-name
Jim Nervall
sumber
0

Bagi saya, masalahnya adalah saya memiliki git dan sistem file macOS saya diatur ke dua sensitivitas huruf yang berbeda. Mac saya diformat APFS / Is Case-Sensitive: TIDAK tetapi saya telah membalik pengaturan git saya di beberapa titik mencoba mengatasi masalah aneh dengan penamaan aset gambar Xcode jadi git config --global core.ignorecase false . Dengan membaliknya kembali menyelaraskan pengaturan dan membuat ulang cabang dan mendorong saya kembali ke jalurnya.

git config --global core.ignorecase true

Kredit: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Michael
sumber
0

Saya memiliki masalah yang sama tetapi terselesaikan. Saya menyadari nama cabang peka huruf besar / kecil. Cabang utama di GitHub adalah 'master', sedangkan di perintah gitbash saya adalah 'Master'. Saya mengganti nama Master di repositori lokal menjadi master dan berhasil! 😀😀

Waswa Rodgers
sumber
0

Saya mengalami masalah yang sama dan memperhatikan bahwa saya telah mencampurkan casing saat memeriksa cabang. Saya check out dan branchNamebukannya BranchNamedan ketika saya mencoba mendorong ke remote, saya mendapat kesalahan yang sama.

Cara mengatasinya:

git push --set-upstream origin BranchName

Dengan mengatur upstream ke nama yang benar, cabang yang benar telah diperbarui di github dan saya kemudian dapat memeriksa nama cabang yang benar dengan

git checkout BranchName 

Dan itu harus up to date dengan dorongan terakhir Anda.

bediV5
sumber
-1

Jika Anda berada di cabang lokal, bisa mengganti nama cabang "Fitur / Nama" menjadi "fitur / Nama"

git -m feature/Name

Jika Anda mengalami masalah untuk melakukan git pushpembayaran di cabang lain (ex develop) dan kembali ke cabang yang diganti namanya

git checkout feature/Name

dan coba lagi git push

Ronaldo Albertini
sumber