Jak rozwiązać błąd gita „nie coś, co możemy scalić”

291

Właśnie napotkałem problem podczas scalania gałęzi w master w git. Najpierw dostałem nazwę oddziału, uruchamiając git ls-remote. Nazwijmy tę gałąź „nazwą gałęzi”. Następnie uruchomiłem git merge branch-namepolecenie i otrzymałem następujący wynik:

fatal: branch-name - not something we can merge

Jak rozwiązać ten błąd?

Brian
źródło

Odpowiedzi:

356

Jak pokazano w Jak powstaje „nie coś, co możemy scalić”?, błąd ten może wynikać z literówki w nazwie oddziału, ponieważ próbujesz wyciągnąć gałąź, która nie istnieje.

Jeśli to nie jest problem (jak w moim przypadku), prawdopodobnie nie masz lokalnej kopii oddziału, którą chcesz scalić. Git wymaga lokalnej znajomości obu gałęzi, aby połączyć te gałęzie. Możesz rozwiązać ten problem, sprawdzając gałąź do scalenia, a następnie wracając do gałęzi, z którą chcesz się połączyć.

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

To powinno działać, ale jeśli pojawi się komunikat o błędzie

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

musisz pobrać zdalny (prawdopodobnie, ale niekoniecznie „pochodzenie”) przed wypróbowaniem gałęzi:

git fetch remote-name
Brian
źródło
3
Zdarzyło mi się to po dodaniu nowego pilota - musiałem zrobić git fetchpierwszy, zanim połączyłem zdalny oddział.
Jason
pobieranie i wyewidencjonowywanie oddziału ze zdalnego. git fetch && git Checkout BranchName
Juni Brosas
2
Zdarzyło mi się to, gdy wpadłem na niewłaściwy projekt (tj. Było to inne repozytorium, w którym nie było nawet gałęzi, którą chciałem scalić)
JoelFan,
1
Jeśli próbujesz zsynchronizować rozwidlenie w wierszu polecenia ( help.github.com/articles/syncing-a-fork ) ten błąd jest prawdopodobnie spowodowany pominięciem kroku 0. Co? Nie ma kroku 0 na liście? Tak, dlatego łatwo go przeoczyć. „Zanim będzie można zsynchronizować rozwidlenie z repozytorium nadrzędnym, należy skonfigurować pilota, który wskazuje repozytorium nadrzędne w Git”. <- to jest krok 0. Jeśli pominiesz ten krok, otrzymasz powyższy błąd, który prawdopodobnie umieściłeś w Google, prowadząc cię tutaj. :-)
Steve Bonds
1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU,
96

To głupia sugestia, ale upewnij się, że w nazwie oddziału nie ma literówki!

nieskończony
źródło
4
nie tak głupie, ponieważ „literówka” może sprowadzić się do faktu, że gałąź nie została jeszcze pobrana (a tym samym nieznana lokalnie) .. Git robi rzeczy inaczej niż CVS lub SVN ..
klang
2
Problem może być również spowodowany, jeśli nazwa gałęzi zawiera znaki takie jak przecinki (,) lub apostrofy (').
AxeEffect
Upewnij się także, że znajdujesz się w odpowiednim oknie / karcie repozytorium lub terminalu, szczególnie jeśli pracujesz na wielu repozytoriach jednocześnie.
totymedli
71

Podczas wyciągania ze zdalnego w górę rzeki git fetch --allwykonałem dla mnie lewę:

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]

W innych przypadkach stwierdziłem, że błąd „Nie możemy scalić” wystąpi również, jeśli gałąź zdalna (pochodzenie, wysyłanie) nie istnieje. To może wydawać się oczywiste, ale możesz znaleźć się git merge origin/developna repozytorium, które ma tylko master.

Eneko Alonso
źródło
5
Naprawdę nie wiem, dlaczego ta odpowiedź nie uzyskała tylu głosów, co powyższa. „git fetch -all” to polecenie, które zwykle nie uruchamia się przed połączeniem zdalnej gałęzi i które rozwiązało problem.
Dayanand Gowda
2
Ponieważ pobieranie nie jest pobierane automatycznie i musisz to zrobić ręcznie. Więc pobranie pary - wszystko i pociągnięcie - wszystko załatwi sprawę.
danielpopa
Dziękuję Ci! git remote add upstreamByło ważne, że brakowało mi rozwiązać to dla mnie. Myślę, że częstym błędem jest założenie, że widelec automatycznie wie, skąd został rozwidlony.
Brent
23

Też miałem ten problem. Gałąź wyglądała jak „nazwa użytkownika / master”, co zdawało się mylić git, ponieważ wyglądało jak zdefiniowany przeze mnie adres zdalny. Dla mnie używam tego

git merge origin/username/master

działało idealnie dobrze.

spekulatius
źródło
4
Musiałem też postawić origin/przed nazwą odległej gałęzi.
AsGoodAsItGets
Musisz to zrobić, jeśli nazwa gałęzi zawiera ukośnik /.
CTS_AE
21

Poniższa metoda działa dla mnie za każdym razem.

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
RNV
źródło
To zadziałało dla mnie dziękuję. I jest to w zasadzie właściwe rozwiązanie: po prostu upewnij się, że masz gałąź źródłową sprawdzoną przed próbą jej scalenia.
dps
11

Może się tak zdarzyć, ponieważ tej gałęzi nie ma w Twojej okolicy. przed połączeniem użyj

git fetch origin
Alok Kamboj
źródło
8

Ta odpowiedź nie jest związana z powyższym pytaniem, ale napotkałem podobny problem i być może będzie to przydatne dla kogoś. Próbuję scalić gałąź funkcji do opanowania, jak poniżej:

$ git merge fix-load

do tego dostał następujący komunikat o błędzie:

merge: fix-load - nie coś, co możemy scalić

Patrzyłem przede wszystkim na rozwiązania, ale nie na żadne z nich.

Wreszcie zdałem sobie sprawę, że przyczyną problemu jest błąd ortograficzny w nazwie mojego oddziału (właściwie nazwa oddziału scalania to fix-loads).

Yala Ramesh
źródło
4
Dla mnie dodawanie pochodzenia działało. Biorąc twój przykład, git merge origin/fix-loadsdziałało.
Ram Patra
7

Ten błąd występuje, ponieważ gałąź, którą chcesz scalić, nie istnieje w lokalnym repozytorium.

Najpierw sprawdź kasjer, który chcesz scalić z gałęzią master, wykonując następujące polecenie:

git checkout branch_name_to_merge

Następnie spróbuj połączyć go z gałęzią master za pomocą następującego polecenia:

git merge branch_name_to_merge
Bilal Ahmed Yaseen
źródło
2
Może się to również zdarzyć, jeśli nie zwracasz uwagi na nazwę swojego oddziału (tj. Z błędem ortograficznym) :)
Matt Borja
To zadziałało dla mnie. Kiedy pracuję w Atom z kartą Git i checkout
zmieniam
7

Ten błąd sugeruje, że gałąź, z której chcesz scalić zmiany (tj. W twoim przypadku nazwa-gałęzi) nie jest obecna w twoim lokalnym, więc powinieneś sprawdzić gałąź i pobrać zmiany lokalne. Przejdź do głównej gałęzi i pobierz, a następnie wykonaj następujące czynności:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Amar Magar
źródło
Będę wybredny i powiem, że nie sądzę, aby komunikat o błędzie sugerował coś takiego :-)
Brian Agnew
3

Wystąpił ten błąd, gdy zrobiłem git merge BRANCH_NAME "some commit message"- zapomniałem dodać flagi -m dla komunikatu zatwierdzenia, więc pomyślałem, że nazwa gałęzi zawiera komentarz.

czysto logiczne
źródło
3

Moim zdaniem nie zdążyłem zmapować mojego lokalnego oddziału za pomocą zdalnego repo. Zrobiłem poniżej i działało dobrze.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain
Vinay Sharma
źródło
2

Jeśli ciąg zawierający odwołanie jest generowany przez inne polecenie Git (lub inne polecenie powłoki w tym zakresie), upewnij się, że nie zawiera on znaku powrotu na końcu. Będziesz musiał go rozebrać przed przekazaniem łańcucha do „git merge”.

Zauważ, że jest to dość oczywiste, gdy tak się dzieje, ponieważ komunikat o błędzie w 2 wierszach:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge
okrokweta
źródło
3
Podaj komentarz, gdy oddałeś głos na odpowiedź. Być może nie był to problem z oryginalnym plakatem, ale jest to możliwa przyczyna komunikatu o błędzie (sam miałem problem).
ocroquette
2

Wystąpił ten błąd, ponieważ w nazwie oddziału mieliśmy przecinek (,). Usunęliśmy lokalny oddział, a następnie ponownie sprawdziliśmy go pod nową nazwą bez przecinka. Udało nam się to połączyć.

Doug
źródło
Podkreślenie wydaje się również problematyczne. +1
Anders Lindén
1
Często używam podkreślników w nazwach oddziałów @ AndersLindén
nzaleski
i nawiasy też były problematyczne ... + 1
Pablo Ezequiel
1

Dla potomnych: Jak powiedział AxeEffect ... jeśli nie masz literówek, sprawdź, czy masz śmieszne znaki w nazwie lokalnego oddziału, takie jak przecinki lub apostrofy. Właśnie to mi się właśnie przydarzyło.

Elder Smash
źródło
Lub podkreślenie. +1
Anders Lindén
1

Sugeruję sprawdzenie, czy możesz przejść do gałęzi, z którą próbujesz się połączyć.

Wystąpił ten błąd, mimo że gałąź, z którą chciałbym się połączyć, znajdowała się w lokalnym repozytorium i nie wystąpiły błędy w pisowni.

Zignorowałem moje lokalne zmiany, aby móc przejść do oddziału (można również preferować ukrywanie lub zatwierdzanie). Następnie wróciłem do początkowej gałęzi i scalanie zakończyło się powodzeniem.

eaykin
źródło
0

Dla mnie problem wystąpił, gdy spróbowałem:

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

Więc właściwie powinienem był napisać masterzamiast develop, ponieważ master był nazwą gałęzi Subtree, a nie moją rzeczywistą gałęzią.

Levon Petrosyan
źródło
0

Może to zabrzmieć dziwnie, ale pamiętaj, aby skonfigurować adres e-mail i nazwę git:

git config --global user.email "[email protected]"
git config --global user.name "FIRST_NAME LAST_NAME"
superarts.org
źródło
0

Dla mnie problemem były „podwójne znaki cudzysłowu” w łączącej się wiadomości. Więc kiedy usunąłem podwójny znak, wszystko działało magicznie. Mam nadzieję, że komuś pomogę. (Przepraszam za mój słaby angielski)

Aryelson Santos
źródło
0

Miałem drzewo robocze z głównym i kolejną gałąź sprawdzoną w dwóch różnych folderach roboczych.

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

Jeśli potrzebujesz po prostu scalić najnowsze zatwierdzenie:

git merge origin/vyas-cr-core 
git push

I jest taki sam jak zawsze:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push
Vyas Bharghava
źródło
0

Gałąź, którą próbujesz scalić, może nie zostać w tej chwili zidentyfikowana, więc wykonaj git branch i sprawdź, czy gałąź, którą chcesz scalić, nie istnieje, jeśli nie, to wykonaj, git pull a teraz, jeśli to zrobisz git branch, gałąź będzie teraz widoczna, a teraz występujeszgit merge <BranchName>

jogurt
źródło