! [odrzucono] master -> master (pobierz najpierw)


106

Czy istnieje dobry sposób na wyjaśnienie, jak rozwiązać problem „ ! [rejected] master -> master (fetch first)'” w Git?

Kiedy używam tego polecenia $ git push origin master, wyświetla komunikat o błędzie.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

Odpowiedzi:


137

Odpowiedź jest, git każe ci najpierw pobrać.

Prawdopodobnie ktoś inny naciskał już na mastering, a twoje zatwierdzenie jest opóźnione. Dlatego musisz pobrać, scalić zestaw zmian, a następnie będziesz mógł ponownie naciskać.

Jeśli tego nie zrobisz (lub co gorsza, jeśli wymusisz to za pomocą --forceopcji), możesz zepsuć historię zmian.

EDYCJA: Bardziej szczegółowo omawiam ostatni punkt, ponieważ facet tutaj właśnie dał bardzo złą radę dotyczącą korzystania z --forceopcji.

Ponieważ git to DVCS, idealnie wielu innych programistów pracuje nad tym samym projektem co Ty, używając tego samego repozytorium (lub jego rozwidlenia). Jeśli wymusisz nadpisanie swoim zestawem zmian, twoje repozytorium będzie niezgodne z danymi innych osób, ponieważ „przepisałeś historię”. Sprawisz, że inni ludzie będą nieszczęśliwi, a repozytorium ucierpi. Prawdopodobnie kociak na świecie też będzie płakał.

TL; DR

  1. Jeśli chcesz rozwiązać, najpierw pobierz (a następnie scal).
  2. Jeśli chcesz się włamać, skorzystaj z --forceopcji.

Jednak prosiłeś o to pierwsze. Postaw na 1) zawsze, nawet jeśli zawsze będziesz używać git samodzielnie, ponieważ jest to dobra praktyka.


5
Nie możesz pobrać, usunąć ważnych zmian w plikach lokalnych?
Leonardo Castro

2
Nie zmienia się po pobraniu
dhein

@dhein tak jak napisałem, po pobraniu musi nastąpić scalenie - chodzi o to, że trzeba „wyrównać” drzewo lokalne z drzewem zdalnym (stąd scalanie) - ale dzięki, napisałem to w TL; DR też
linuxbandit

93

próbować:

git fetch origin master
git merge origin master

Po napisaniu tego kodu otrzymałem inny błąd: (bez przewijania do przodu)

Piszę ten kod:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

I rozwiązałem mój problem


Dla mnie to samo. To rozwiązało mój problem. Jest kilka ostrzeżeń. Zepsułem repozytorium podrzędne, ale rozwiązałem to w ten sposób: stackoverflow.com/questions/19584255/...
M. Beausoleil

1
@Aurelio A Twoje polecenie łączenia jest niepoprawne, powinno być git merge master.
mike

Dlaczego musimy użyć git branch -D tmp?
Милош Вељковић

28

Powinieneś użyć git pull, to polecenie wykonaj a, git fetcha następnie wykonaj git merge.

Jeśli użyjesz git push origin master --forcepolecenia, możesz mieć problemy w przyszłości.


1
Czy to prawda, że ​​powinieneś używać --force tylko wtedy, gdy jesteś jedyną osobą w projekcie i denerwujesz się, próbując wykonać pierwszy krok?
chrips

20

pull jest zawsze właściwym podejściem, ale jednym wyjątkiem może być próba konwersji systemu plików bez Git do repozytorium Github. Tam musiałbyś wymusić pierwsze zatwierdzenie.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

działa u mnie, zacząłem od nowa nowy projekt (to samo repozytorium) i chciałem go wymienić.
ucotta

18

Spróbuj tego polecenia git

git push origin master --force

lub brak siły -f

git push origin master -f


2
Zastępuje to ograniczenie git push. Niezalecane do pracy zespołowej. Z dokumentacji git push: jeśli ktoś inny zbudował Twoją oryginalną historię podczas zmiany bazy, koniec gałęzi na pilocie może posunąć się naprzód wraz z jej zatwierdzeniem, a ślepe naciskanie z --force straci jej pracę .
Casey

10

Jak stwierdzono w komunikacie o błędzie, musisz najpierw „pobrać”. To zadziałało dla mnie. Użyj polecenia:

  1. git fetch origin master

Następnie wykonaj następujące kroki, aby scalić:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master

4

Spróbuj tego polecenia, aby go rozwiązać -

git push origin master --force

Lub

 git push origin master -f


3

Wykonaj czynności podane poniżej, ponieważ miałem ten sam problem:

$ git pull origin master --allow-unrelated-histories 

(Aby sprawdzić, czy lokalny oddział można łatwo połączyć ze zdalnym)

$ git push -u origin master 

(Teraz wypchnij całą zawartość lokalnego repozytorium git do repozytorium online)


2

Jest prawdopodobne, że ktoś inny (np. Twój kolega) umieścił zatwierdzenia origin/master, których nie ma w twoim lokalnym masteroddziale, a ty próbujesz wypchnąć niektóre zatwierdzenia z lokalnego oddziału na serwer. W 99% przypadków, zakładając, że nie chcesz usunąć ich pracy origin, masz dwie możliwości:

2) Scal ich zmiany w lokalnym oddziale, a następnie wypchnij scalony wynik. git checkout master git pull # resolve conflicts here git push

(Zauważ, że w tym przypadku git pulljest to w zasadzie tylko a git fetchi a git merge).

1) Przebuduj swój lokalny oddział, aby wyglądało na to, że twój kolega najpierw dokonał zatwierdzeń, a następnie dokonał zatwierdzeń. Dzięki temu historia zmian jest ładna i liniowa - i unika się „zatwierdzenia scalania”. Jednakże, jeśli masz konflikty ze zmianami swojego kolegi, być może będziesz musiał rozwiązać te konflikty dla każdego z twoich zatwierdzeń (a nie tylko raz) w najgorszym przypadku. Zasadniczo jest to przyjemniejsze dla wszystkich innych, ale dla ciebie większy wysiłek. git pull --rebase # resolve conflicts here git push

(Zauważ, że git pull --rebaseto zasadniczo a git fetchi a git rebase origin/master.)



1

Twój błąd może wynikać z gałęzi scalania.
Po prostu wykonaj następujące czynności:

krok 1: git pull origin master(w przypadku otrzymania komunikatu zignoruj ​​go)
krok 2: git add .
krok 3: git commit -m 'your commit message'
krok 4:git push origin master


1

Najpierw powinieneś użyć git pull, potem polecenie wykonaj a, git fetcha następnie wykonaj git merge.

Jeśli użyjesz git push origin master --forcepolecenia, możesz mieć problemy w przyszłości.


1

Pokonałem to, sprawdzając nową gałąź w następujący sposób:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

Zostają ci 2 gałęzie: główna i nowa gałąź, które możesz później połączyć.


1

Powodem, dla którego tak się stało w moim przypadku, było utworzenie linku do repozytorium GitHub, zainicjowałem go plikiem README

Podczas tworzenia pilota Git nie inicjalizuj go plikiem README, w przeciwnym razie wyświetli się błąd

Nie rób tego i na pewno zadziała dobrze Zamiast tego zainicjuj go plikiem readme jeśli chcesz po wypchnięciu do gałęzi głównej


0

Wystarczy podać nazwę oddziału wraz z nazwą zdalną.

git fetch origin
git merge origin/master



0

wprowadź opis obrazu tutaj

! [odrzucono] master -> master (najpierw pobierz) błąd: nie udało się przesłać niektórych referencji do „git@github.com:”

wprowadź opis obrazu tutaj

Pomyślnie rozwiązano problem za pomocą polecenia --force. więc musisz użyć
git push origin master --force



-1

ta praca dla mnie

  1. git init

  2. git add --all

3. git commit -m "nazwa"

4. git push origin master - force


-1

To zadziałało dla mnie:

$ git add .
$ git commit -m "commit"
$ git push origin master --force

-1

Problem rozwiązany

Problem, który miałem

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ja też miałem ten sam problem. Problem polega na tym, że twoje commitsw innych repozytoriach nie powiodły się, pushedwięc musisz uruchomić następujące polecenia:

  1. git fetch origin master

    wynik: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    wynik: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    wynik: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Dziękuję bardzo



-2

Jego proste użycie tego polecenia:

git push -f wzorzec pochodzenia

i to wykona twoją pracę

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.