! [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 '[email protected]:zapnaa/abcappp.git'
Symfony
źródło

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.

linuxbandit
źródło
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

Aurelio A
źródło
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.

usainzg
źródło
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
JD
źródło
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


źródło
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
Amila Weerasinghe
źródło
4

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

git push origin master --force

Lub

 git push origin master -f
Mahfujur Rahman
źródło
3

Możesz użyć następującego polecenia: Najpierw sklonuj nową kopię repozytorium, używając flagi --mirror:

$ git clone --mirror git://example.com/some-big-repo.git

Następnie postępuj zgodnie z kodami:

Dodawanie istniejącego projektu do GitHub za pomocą wiersza poleceń

Nawet jeśli to nie zadziała, możesz po prostu zakodować:

$ git push origin master --force 

lub

$ git push origin master -f
Tanuj Chakraborty
źródło
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)

Bhavdeep Kaur
źródło
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.)

Chrispher
źródło
2

Czasami dzieje się tak, gdy duplikujesz pliki, zwykle w rodzaju README.

Jarosław Cichoń
źródło
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

divyang hirpara
źródło
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.

iamkanaramyadav
źródło
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ć.

user3826395
źródło
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

Arijit Kundu
źródło
0

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

git fetch origin
git merge origin/master
Amit Kharel
źródło
0

--force opcja zadziałała dla mnie użyłem git push origin master --force

Ayush Kushwaha
źródło
0

wprowadź opis obrazu tutaj

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

wprowadź opis obrazu tutaj

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

Ranushka Lakmal Sankalpa
źródło
0

Użyj tego polecenia:

git push -f origin master --force
Adil Shehzad
źródło
-1

ta praca dla mnie

  1. git init

  2. git add --all

3. git commit -m "nazwa"

4. git push origin master - force

Mizanur Rahman
źródło
-1

To zadziałało dla mnie:

$ git add .
$ git commit -m "commit"
$ git push origin master --force
Yamuna Bangaru
źródło
-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

Marszałek D. Teach
źródło
-1

Myślałem, że to z powodu połączenia, ale używam tego:

git push --force origin master

Nalendro Agung Wicaksono
źródło
--forcezepsuje githistorię zmian , nie byłoby dobrze jej używać.
Chandan
-2

Jego proste użycie tego polecenia:

git push -f wzorzec pochodzenia

i to wykona twoją pracę

rajat prakash
źródło