odrzucone master -> master (non-fast-forward)


218

Próbuję przesłać mój projekt (wszystkie pliki w nowym repozytorium). Postępuję zgodnie z instrukcjami, ale gdy naciskam przycisk, pojawia git push -u origin mastersię ten błąd:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.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.

Wystąpił ten błąd wiele razy i nie mogę się dowiedzieć, co robić.


4
Jeśli jesteś pewien, że twój lokalny mistrz ma najnowsze zmiany, które chcesz zdalnie, to wykonaj git push --force
IgorGanapolsky

34
git push --force <remote_repository>pracował dla mnie.
Sorter

@Sorter - Miałem ten sam problem przez cały dzień, pomogło mi to !! Dziękuję Ci. Ale nie wyjaśnia, dlaczego problem wystąpił w pierwszej kolejności i dlaczego poprawka zadziałała.
Padawan,

1
@pmr, po prostu nonszalancko pytając, czy OP „przeczytaj komunikat o błędzie” wcale nie pomaga. Oczywiście komunikat o błędzie nie miał żadnego sensu dla OP, tak jak nie przekazał żadnej wiadomości dla mnie, ani dla pozostałych 66 osób, które głosowały za jego postem. Snarky, dowcipniejszy niż-choć wcale nie pomaga ludziom.
Padawan,

3
@Padawan Zauważysz również, że ta „nędzna, dowcipniejsza osoba” podała zaakceptowaną odpowiedź na to pytanie, a 72 osobom (prawdopodobnie łącznie z tobą) uznało to za pomocne. Przepraszam, że mój komentarz okazał się arogancki, ale byłoby to moje pierwsze pytanie, gdybyś zadał mi to pytanie również w kontekście zawodowym. Czasami zatrzymanie się i poświęcenie minuty na dokładne przeczytanie komunikatu o błędzie czasami czyni cuda. Zrobiłem to, gdy pierwszy raz zobaczyłem ten błąd.
pmr

Odpowiedzi:


160

Jak mówi komunikat o błędzie: git pullzanim spróbujesz git push. Najwyraźniej twój lokalny oddział nie jest zsynchronizowany z twoim oddziałem śledzenia.

W zależności od reguł projektu i przepływu pracy możesz także użyć git pull --rebase.


1
pokazuje mi to automatyczne łączenie README.md Automatyczne scalanie nie powiodło się; naprawić konflikty, a następnie zatwierdzić wynik.
Asantoya17

1
@ Asantoya17 Zmiany wprowadzone w zdalnym systemie głównym powodują konflikt z Twoimi zmianami. Przejrzyj plik i przejrzyj je. Następnie potwierdź wyniki rozstrzygania. Zdobądź samouczek lub książkę lub przynajmniej przeczytaj wiadomości.
pmr

1
Co oznacza pull? Umożliwia wypychanie pliku lub pobieranie i pobieranie pliku ze strony internetowej repozytorium? (np. Bit Bucket)
David Dimalanta

4
@AndrewS git push --force origin master. Jeśli napotkasz tego rodzaju problemy więcej niż raz w życiu, przepływ pracy w projekcie jest zepsuty. Funkcje powinny być rozwijane w gałęziach i łączone bez szybkiego przekazywania, a jeśli funkcja „nie powiodła się”, powinieneś cofnąć zatwierdzenie scalania (najlepiej wykonaj testowanie w gałęzi integracji przed scaleniem funkcji do opanowania). Nie mam jednak pojęcia o Eclipse.
pmr

1
Co zrobić, jeśli ten błąd zgłasza git pull origin trunk:master?
Andry

175

UWAGA: To nigdy nie jest zalecane użycie git. Spowoduje to zastąpienie zmian na pilocie. Zrób to tylko, jeśli wiesz w 100%, że lokalne zmiany powinny zostać przekazane do zdalnego sterownika głównego.

Spróbuj tego: git push -f origin master


47
Nie, nie próbuj tego. Od git help push: „Może to spowodować utratę zatwierdzeń przez zdalne repozytorium; używaj go ostrożnie”.
jcsahnwaldt Reinstate Monica

7
zdecydowanie nie rób tego
Lluís

14
to działało dla mnie. Uznałem, że było OK, ponieważ moim jedynym zatwierdzeniem na github było to, które zostało utworzone przy użyciu nowego repo. Prawdopodobnie dobrym pomysłem jest nieużywanie go po rozpoczęciu projektu.
Matthew Moore,

1
może być przydatna, jeśli chcesz zaktualizować repo, który został stworzony do celów dostawy (a więc nie ma nowych zmian na stronie zdalnej)
HiB

Po prostu użyłem tego, kiedy właśnie dokonałem zatwierdzenia, zsynchronizowanego z GitHub, a potem żałowałem, że nie dodałem innego pliku do tego zatwierdzenia. Więc cofnąłem go lokalnie, wykonałem powyższe polecenie, aby usunąć go z GitHub, a następnie zatwierdziłem ponownie lokalnie, a następnie zsynchronizowałem. Wszystko dobrze teraz! Pamiętajcie, wiedziałem na pewno, że nie było żadnych innych zobowiązań w tym oddziale.
zeMinimalist

18

to polecenie działało dla mnie dobrze

git push -f origin master

3
Zachowaj ostrożność przed użyciem tego polecenia. Używając tego polecenia stracisz wszystkie swoje wcześniejsze zobowiązania.
twenk11k

robi -f oznacza siłę
pchającą

@maheshmnj Tak!
testuser

15

Właśnie otrzymałem ten błąd.

Utworzyłem repozytorium github po utworzeniu mojego lokalnego repozytorium git, więc musiałem zaakceptować zmiany w lokalnym przed przekazaniem do github. W tym przypadku jedyną zmianą był plik readme utworzony jako opcjonalny krok podczas tworzenia repozytorium github.

git pull https://github.com/*username*/*repository*.git master

URL repozytorium jest stąd pobierany na stronie github projektu:

wprowadź opis zdjęcia tutaj

Następnie zainicjowałem ponownie (może to nie być potrzebne)

git init
git add .
git commit -m "update"

Następnie wciśnij:

git push

3
Ta odpowiedź odzwierciedla rzeczywisty scenariusz przypadku.
kta

9

stworzyłem nowe repo w github i miałem ten sam problem, ale miałem też problem z ciągnięciem, więc to zadziałało dla mnie.

ale nie jest to zalecane w repozytoriach, które mają już wiele kodów, ponieważ może to wszystko popsuć

git push origin master --force

Ta odpowiedź jest już podana: stackoverflow.com/a/16374574/1771479 i nie zaleca się tego.
ponownie

9

OSTRZEŻENIE:

Wybór „ git pull” nie jest ZAWSZE rozwiązaniem, więc bądź ostrożny. Możesz napotkać ten problem (ten wymieniony w Q), jeśli celowo zmieniłeś historię swojego repozytorium. W takim przypadku git myli zmiany historii z nowymi zmianami w zdalnym repozytorium. Powinieneś więc wybrać git push --force, ponieważ dzwonienie git pullcelowo cofnie wszystkie zmiany, które wprowadziłeś w swojej historii.


8

Jeśli git pullto nie pomoże, prawdopodobnie wprowadziłeś zmiany (A), a następnie użyłeś ich git commit --amenddo dodania kolejnych zmian (B). Dlatego git uważa, że ​​możesz stracić historię - interpretuje B jako inne zatwierdzenie, mimo że zawiera wszystkie zmiany z A.

             B
            /
        ---X---A

Jeśli nikt później nie zmieni repozytorium A, możesz to zrobić git push --force.

Jeśli jednak nastąpią zmiany w Astosunku do innej osoby:

             B
            /
        ---X---A---C

wtedy musisz zmienić bazę, że osoby zmieniają się z Ana B( C-> D).

             B---D
            /
        ---X---A---C

lub napraw problem ręcznie. Nie myślałem jeszcze, jak to zrobić.


7

użyj tego polecenia:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

lubić:

git pull --allow-unrelated-histories origin master

ten błąd występuje, gdy projekty nie mają wspólnego przodka.


7
git push -f origin master

użyj brutalnej siły ;-) Najprawdopodobniej próbujesz dodać folder lokalny, który utworzyłeś przed utworzeniem repo na git.


2
Każda odpowiedź, w tym ta, powinna dawać ostrzeżenie.
D. Ben Knoble,

1
Próbowałem tego i kosztowało mnie to wiele zmian w GitHub, które musiałem przywrócić z innego lokalnego klonu repo. Niebezpieczny.
Paflow

6

Wynika to z faktu, że dokonałeś pewnych zmian w swoim mistrzu, więc projekt poprosił cię, abyś najpierw wyciągnął. Jeśli mimo to chcesz go popchnąć, możesz użyć brutalnej siły, wpisując:

git push -f origin master

Pamiętaj, aby najpierw zatwierdzić zmiany:

git add .
git commit -m "Your commit message"


4

Musisz zrobić

git branch

jeśli wynik jest podobny do:

* (no branch)
master

to zrób

git checkout master

Upewnij się, że nie masz żadnych oczekujących zatwierdzeń, ponieważ sprawdzenie spowoduje utratę wszystkich niezaangażowanych zmian.


4

! [odrzucone] master -> master (non-fast-forward)

Nie panikuj, bardzo łatwo to naprawić. Wszystko, co musisz zrobić, to pociągnąć za sobą, a Twoja gałąź będzie przewijać do przodu:

$ git pull myrepo master

Następnie ponów próbę i wszystko powinno być w porządku:

$ git push github master


4

Zdarzyło mi się to, kiedy pracowałem w gałęzi deweloperskiej, a moja gałąź główna nie ma najnowszej aktualizacji.

Więc kiedy próbowałem uzyskać push z gałęzi developerskiej, miałem ten błąd.

Naprawiłem to, przełączając się na gałąź master, git pull, a następnie wróciłem, aby rozwinąć gałąź i git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Miałem ten problem na maszynie programistycznej. devOddział pchał w porządku, ale masteroddział dał mi (przy git pushing kiedy będąc na devoddziale):

! [rejected]        master -> master (non-fast-forward)

Więc próbowałem:

git checkout master
git pull

Co dało mi:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Dowiedziałem się, że brakuje gałęzi master .git/configi dodał:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Potem git pushdziałało również dobrze na devoddziale.


2

Mój pilot nie był zsynchronizowany z lokalnym, więc to zadziałało dla mnie

git pull --rebase

i upewnij się, że kiedy to zrobisz git pull, powinno być napisane: Już aktualne, a teraz jesteś gotowy, aby przejść do źródła

zakładając, że już masz git remote add origin remote repository URL

robić

`git push origin master`  

Zrzut ekranu mówi wszystko wprowadź opis zdjęcia tutaj

Alternatywnie możesz to zrobić

  1. git stash (tymczasowo przechowuje niezaangażowaną pracę)
  2. git pull (synchronizuj lokalne i zdalne)
  3. git stash pop (odzyskaj niezamówione zmiany)
  4. git push

1

Miałem to samo co problem. Używam Git Totoise. Wystarczy kliknąć prawym przyciskiem myszy -> TotoiseGit -> Oczyść. Teraz możesz naciskać na Github. Działa to dobrze ze mną: D


1

Wynika to z tego, że wprowadziłeś sprzeczne zmiany do jego wzorca. A twój serwer repozytorium nie jest w stanie powiedzieć ci tego słowami, więc daje ten błąd, ponieważ nie jest dla niego kwestią radzenia sobie z tymi konfliktami, więc prosi cię o zrobienie tego sam. Tak jak ?

1- git pull Spowoduje to scalenie kodu z repozytorium z kodem administratora witryny. Konflikty są pokazywane.

2- traktuj te konflikty manualemente.

3-

git push origin master

I presto, twój problem został rozwiązany.


0

Jedyne, co udało mi się rozwiązać, to usunięcie lokalnego i repozytorium git i utworzenie go ponownie na obu końcach. Na razie działa dobrze.


Zawsze przechowuję kopię zapasową mojego repozytorium git na Dropbox. W ten sposób nie muszę usuwać lokalnego repozytorium, po prostu kopiuję i wklejam odpowiednie katalogi z Dropbox, gdy sytuacja się pojawi.
IgorGanapolsky

0

Jeśli ktoś ma ten błąd podczas próby wypchnięcia do heroku, po prostu zamień „origin” na „heroku” w następujący sposób: git push -f heroku master



0

Może to być również spowodowane błędem nazwy podczas nadawania nazwy Repo. Jeśli którakolwiek z powyższych odpowiedzi nie zadziałała. To zadziałało dla mnie:

Usuń to repozytorium i utwórz nowe, a następnie spróbuj ponownie wykonać następujące polecenia:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

jeśli program dodawania pochodzenia już istnieje, użyj tego zamiast tego:

git remote set-url origin *your_git_name.git*
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.