2011-08-29 16 views
21

Zacząłem otrzymywać komunikat o błędzie "nie udało się przeforsować niektórych błędów", gdy zmieniłem niektóre pliki i próbowałem wykonać polecenie push. Większość instrukcji mówi, żeby najpierw zrobić git. Zrobiłem to i git mówi, że wszystko jest aktualne. Masz pomysł, jak rozwiązać ten błąd? Zacząłem też otrzymywać komunikat "brak informacji o wersji", nie wiem, czy to ma jakiś związek z błędem.Git: nie udało mi się przeforsować niektórych poprawek, chociaż wykonałem git pull

git push origin master 
git: /usr/local/lib/libz.so.1: no version information available (required by git) 
Enter passphrase for key '/root/.ssh/id_rsa': 
To [email protected][mydomain].beanstalkapp.com:/repo-git.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected][mydomain].beanstalkapp.com:/repo-git.git' 
+0

Co się dzieje, jeśli sklonować repozytorium w innym lokalizacja i tr y na to naciskać? – Intrepidd

Odpowiedz

32

Błąd jest to, że ktoś popchnął w master branży i chcesz nadpisać ich zmianę jeśli git pozwalał naciskać (to właśnie oznacza non-fast forward błędu). Musisz więc połączyć lokalny oddział master ze zdalnym oddziałem master.

To może się zdarzyć, jeśli wykonałeś git pull, podczas gdy oddział lokalny nie był oddziałem master. Jeśli chcesz tylko do pchania oddział, nad którym pracujesz, a nie master oddział, trzeba powiedzieć go git stosując pełną formę git-push:

$ git push remote local-branch:remote-branch 
+0

W jaki sposób scaliłbym lokalny oddział główny ze zdalną gałęzią główną? W każdym razie zauważyłem z odgałęzieniem git, że używałem oddziału o nazwie (No branch). Wykonałem polecenie kasowania i mogę teraz pchać/wyciągać – jjei

+1

Kiedy wykonujesz polecenie 'git pull', robi ono' pobieranie git', po którym następuje 'git merge' z odgałęzieniem zdalnym, które śledzą bieżące gałęzie. Możesz wykonać ręczne scalanie z 'git merge master'. –

1

Pamiętaj, aby upewnić się, że przyciąganie faktycznie przepracowane. Możliwe, że scalenie (które jest częścią pull) nie powiodło się.

Po otrzymaniu tego komunikatu o błędzie nie zauważyłem, że ciągnięcie nie powiodło się. Pobranie nie powiodło się z powodu pewnych niezatwierdzonych zmian plików (niezwiązanych z plikami, które próbowałem przesłać), które spowodowały niepowodzenie scalania. Przywróciłem zmiany w plikach (ponieważ nie były ważne), a następnie ponownie wykonałem polecenie. Po udanym naciągnięciu push działał.

5

Najlepszym z możliwych odpowiedzi jest Git pomoc here

Radzenie sobie z błędami non-fast-forward

Od czasu do czasu można spotkać ten błąd podczas pchania zobowiązuje (git push origin master) do GitHub:

To https://github.com/user/repo.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/user/repo.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. 
See the 'Note about fast-forwards' section of 'git push --help' for details. 

Ten błąd może być nieco przytłaczające w pierwszej kolejności; nie bój się!

Po prostu, Git nie może dokonać zmiany na pilocie bez utraty zatwierdzenia, więc odmawia push. Zwykle jest to spowodowane przez innego użytkownika pchającego do tej samej gałęzi.

Można temu zaradzić poprzez pobieranie i łączenie pilota oddziału:

git fetch origin 
git merge origin master 

Albo można po prostu użyć git pull wykonywać zarówno poleceń naraz:

git pull origin master 

W niektórych przypadkach błąd jest wynikiem destrukcyjnych zmian wprowadzonych lokalnie za pomocą komend takich jak git commit --amend lub git rebase. Chociaż możesz przesłonić pilota, dodając --force do polecenia push, powinieneś to zrobić tylko, jeśli masz absolutną pewność, że to właśnie chcesz zrobić. Pulsujące siły mogą powodować problemy dla innych użytkowników, którzy pobrali zdalny oddział i są uważane za złe praktyki. W razie wątpliwości nie naciskaj na siłę.

+0

Scalenie: pochodzenie - nie coś, co możemy połączyć – Makalele

1

Błąd pojawia się również po umieszczeniu niewłaściwej nazwy oddziału w poleceniu push.

Załóżmy na przykład, że znajdujesz się w oddziale o nazwie iss8, ale mówisz git, że chcesz przekazać numer iss3 (tak jak ja właśnie), otrzymasz ten sam błąd.

$ git push origin iss3 
error: src refspec iss3 does not match any. 
error: failed to push some refs to '[email protected]:myuser/myproject.git' 

Hmm, sprawdzić stan:

$ git status 
On branch iss8 
nothing to commit, working directory clean 

Och, spójrz, jestem na innym oddziale. Dzięki, że nie pozwoliłeś mi zrobić czegoś naprawdę głupiego.

$ git push origin iss8 
Counting objects: 15, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (9/9), done. 
Writing objects: 100% (9/9), 2.62 KiB | 0 bytes/s, done. 
Total 9 (delta 3), reused 0 (delta 0) 
To [email protected]:myuser/myproject.git 
* [new branch]  iss8 -> iss8 
2

Upewnij się, że gałąź jest niechroniona lub programista może naciskać jest sprawdzany.

+3

To jest komentarz, a nie odpowiedź – STF

0
1) git stash 
2) git pull 
3) git push 

mojego pierwotnego błędu:

enter image description here

Po "git zapas"

enter image description here

0

spróbować tej komendy git push -f origin master

Powiązane problemy