Git'in “birleştirebileceğimiz bir şey değil” hatası nasıl giderilir


291

Git'te master'a bir şube birleştirilirken bir sorunla karşılaştım. İlk olarak, şube adını çalıştırarak aldım git ls-remote. O şubeye "şube adı" diyelim. Daha sonra git merge branch-namekomut çalıştırdım ve aşağıdaki sonucu aldım:

fatal: branch-name - not something we can merge

Bu hatayı nasıl çözebilirim?

Yanıtlar:


357

Görüldüğü gibi "bir şey biz birleştirebilirsiniz değil" ne How ortaya? , var olmayan bir dalı çekmeye çalıştığınız için, şube adındaki bir yazım hatası nedeniyle bu hata oluşabilir.

Sorun bu değilse (benim durumumda olduğu gibi), birleştirmek istediğiniz şubenin yerel bir kopyası olmayabilir. Git, bu şubeleri birleştirmek için her iki şubenin de yerel bilgisine ihtiyaç duyar. Bunu birleştirmek için dalı kontrol edip birleştirmek istediğiniz şubeye geri dönerek çözebilirsiniz.

git checkout branch-name
git checkout master
git merge branch-name

Bu işe yaramalı, ancak bir hata mesajı alırsanız

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

şubeyi kontrol etmeden önce uzaktan kumandayı (muhtemelen, ancak "orijin" değil) getirmeniz gerekir:

git fetch remote-name

3
Bu, yeni bir uzaktan kumanda ekledikten sonra başıma geldi - git fetchuzak dalı birleştirmeden önce bir ilk yapmam gerekiyordu .
Jason,

uzaktan alma ve alma şube. git fetch && git checkout BranchName
Juni Brosas

2
Bu yanlış projeye cd'dken başıma geldi (yani birleştirmek istediğim şubeye bile sahip olmayan farklı bir repo idi)
JoelFan

1
Komut satırında ( help.github.com/articles/syncing-a-fork ) bir çatalı senkronize etmeye çalışıyorsanız, bu hata muhtemelen 0. adımı kaçırdığınız için olabilir. Ne? Listelenen 0 adımı yok mu? Evet, bu yüzden kaçırmak kolaydır. "Çatalınızı yukarı akış deposuyla senkronize edebilmeniz için Git'teki yukarı akış deposuna işaret eden bir uzaktan kumanda yapılandırmalısınız." <- bu adım 0'dır. Bu adımı atlarsanız, muhtemelen Google'a eklediğiniz ve sizi buraya yönlendiren yukarıdaki hatayı alırsınız. :-)
Steve Bonds

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU

97

Bu aptalca bir öneri, ancak şube adında yazım hatası olmadığından emin olun!


4
o kadar saçma değil, "yazım hatası" şube henüz getirilmemiş (ve böylece yerel olarak bilinmeyen) gerçeği azaltabilir .. Git CVS veya SVN farklı şeyler yapar ..
klang

2
Şube adı virgül (,) veya kesme işareti (') gibi karakterler içeriyorsa da bu soruna neden olabilir.
AxeEffect

Ayrıca, özellikle aynı anda birden çok depo üzerinde çalışıyorsanız, doğru repo veya terminal penceresinde / sekmesinde olduğunuzdan emin olun.
totymedli

71

Uzaktan bir yukarı akıştan çekerken, git fetch --allbenim için hile yaptı:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

Diğer durumlarda, uzak (orijin, yukarı akış) dalı yoksa "Birleştiremeyeceğimiz bir şey değil" hatasını da buldum. Bu bariz görünebilir, ancak kendinizi git merge origin/developsadece sahip olduğunuz bir repo için yapıyor olabilirsiniz master.


5
Bu cevabın neden yukarıdaki cevaba kadar oy vermediğini ciddi olarak bilmiyorum. 'git fetch -all', uzak bir dalı birleştirmeden önce genellikle çalıştırmayı kaçırdığı ve sorunu benim için çözen komuttur.
Dayanand Gowda

2
Çünkü getirme otomatik olarak çekilmez ve bunu manuel olarak yapmanız gerekir. Yani bir çift getir - all & pull - all hile yapacak.
danielpopa

Teşekkür ederim! git remote add upstreamBenim için çözüldü Ben eksikti önemli şeydi. Sanırım yaygın bir hata, çatalın otomatik olarak nereden çatallandığını bildiğini varsayar.
Brent

23

Ben de bu sorunu yaşadım. Şube, git tanımladığım uzak bir adres gibi göründüğü için kafasını karıştırmış gibi görünen 'kullanıcı adı / master' gibi görünüyordu. Bunu benim için kullanıyorum

git merge origin/username/master

mükemmel çalıştı.


4
Ben koymak zorunda origin/çok uzak şube adından önce.
AsGoodAsIt,

Şube adının içinde eğik çizgi varsa, bunu yapmanız /gerekir.
CTS_AE

21

Aşağıdaki yöntem her zaman benim için çalışıyor.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

Bu benim için çalıştı, teşekkürler. Ben bu aslında doğru bir çözümdür: temelde kaynaşmayı birleştirmeye çalışmadan önce kontrol ettiğinizden emin olun.
dps

11

Bu şube yerelde olmadığı için olabilir. birleştirmeden önce

git fetch origin

8

Bu cevap yukarıdaki soru ile ilgili değildir, ancak benzer bir sorunla karşılaştım ve belki bu birisi için yararlı olacaktır. Özellik dalımı aşağıdaki gibi master yapmak için birleştirmeye çalışıyorum:

$ git merge fix-load

bunun için aşağıdaki hata mesajını aldım:

merge: fix-load - birleştirebileceğimiz bir şey değil

Her şeyden önce çözümlere baktım, ama hiçbiri işe yaramadı.

Son olarak, sorunun nedeninin şube adımda bir yazım hatası olduğunu fark ettim (aslında birleştirme dalı adı fix-loads).


4
Benim için kökeni eklemek işe yaradı. Örneğini al, git merge origin/fix-loadsişe yaradı.
Ram Patra

7

Bu hatayı, birleştirmek istediğiniz dal yerel deponuzda bulunmadığı için alıyorsunuz.

Bu nedenle, önce ana dalda birleştirmek istediğiniz brakiyi aşağıdaki komutla kontrol edin:

git checkout branch_name_to_merge

Bundan sonra aşağıdaki komutla ana dal ile birleştirmeyi deneyin:

git merge branch_name_to_merge

2
Bu, şubenizin adına (yani yanlış yazılmış) dikkat etmiyorsanız da olabilir :)
Matt Borja

Bu benim için çalıştı. checkout
Atom'da

7

Bu hata, değişiklikleri birleştirmek istediğiniz dalın (örneğin, sizde şube adı) yerelde bulunmadığını, bu nedenle şubeyi kullanıma almanız ve yerel değişiklikleri getirmeniz gerektiğini gösterir. Ana dalınıza ödeme yapın ve getirin, ardından aşağıdaki adımları izleyin:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

Seçici olacağım ve hata mesajının yukarıdaki gibi bir şey önerdiğini sanmıyorum :-)
Brian Agnew

3

Yaptığımda bu hatayı aldım git merge BRANCH_NAME "some commit message"- taahhüt mesajı için -m bayrağı eklemeyi unutmuştum, bu yüzden şube adının yorumu içerdiğini düşündüm.


3

Bence yerel şubemi uzaktan repo ile eşleştirmeyi özlemiştim. aşağıda yaptım ve iyi çalıştı.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

2

Başvuruyu içeren dize başka bir Git komutu (veya bu konu için başka bir kabuk komutu) tarafından üretiliyorsa, sonunda bir dönüş taşıyıcısı bulunmadığından emin olun. Dizeyi "git merge" e geçirmeden önce onu soymanız gerekir.

Bu gerçekleştiğinde oldukça açık olduğunu unutmayın, çünkü 2 satırdaki hata mesajı:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
Bir cevabı indirdiğinizde lütfen bir yorum sağlayın. Belki orijinal posterin sahip olduğu sorun değildi, ancak hata mesajının olası bir nedeni (sorunu kendim yaşadım).
ocroquette

2

Bu hatayı aldık çünkü şube adında virgül (,) vardı. Yerel şubeyi sildikten sonra virgül kullanmadan yeni bir adla yeniden kontrol ettik. Başarıyla birleştirebildik.


Alt çizgi de sorunlu görünüyor. +1
Anders Lindén

1
Şube isimlerinde sıklıkla alt çizgi kullanıyorum @ AndersLindén
nzaleski

ve parantez de sorunluydu ... + 1
Pablo Ezequiel

1

Posterity için: AxeEffect'in dediği gibi ... yazım hatası yoksa yerel şube adınızda virgül veya kesme işareti gibi saçma karakterler olup olmadığını kontrol edin. Tam da bu şimdi başıma geldi.


Veya alt çizgi. +1
Anders Lindén

1

Birleştirmeye çalıştığınız şubeye geçip geçemediğinizi kontrol etmenizi öneririm.

Birleştirmek istediğim şube yerel depoda olmasına ve yazım hatası olmamasına rağmen bu hatayı aldım.

Şubeye geçebilmem için yerel değişikliklerimi göz ardı ettim (Stash veya kesinleştirme de tercih edilebilir). Bundan sonra ilk şubeye döndüm ve birleştirme başarılı oldu.


0

Benim için bu denediğimde sorun oluştu:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

Bu yüzden aslında masterbunun yerine developyazmalıydım, çünkü usta, benim alt dalım değil, Alt Ağacın dal adı idi.


0

Bu garip gelebilir, ancak git e-postanızı ve adınızı ayarlamayı unutmayın:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

Benim için sorun birleştirme mesajında ​​'çift tırnak' idi. Bu yüzden çift işareti kaldırdığımda, hepsi sihirli bir şekilde çalıştı. Birisine yardım etmeyi umuyorum. (Zavallı İngilizcem için özür dilerim)


0

Master ile bir çalışma ağacım vardı ve iki farklı çalışma klasöründe başka bir şubeye baktım.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

En son taahhüdü birleştirmeniz gerekiyorsa:

git merge origin/vyas-cr-core 
git push

Ve her zaman yaptığımla aynı:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

0

Birleştirmeye git branch çalıştığınız dal şu anda git tarafından tanımlanamayabilir, bu nedenle gerçekleştirin ve birleştirmek istediğiniz dalın mevcut olup olmadığına bakın, eğer yapmazsanız git pull ve şimdi yaparsanız git branch, dal şimdi görünür olacak, ve şimdi gösteriyorsungit merge <BranchName>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.