Egit odrzucił nie przewijanie do przodu

89

Otrzymuję tę wiadomość podczas wypychania do repozytorium github. Czy możesz mi powiedzieć krok po kroku, jak to naprawić? Pchnąłem tylko raz i udało się. Ale kiedy zaktualizowałem projekt i spróbowałem przesunąć moje drugie zatwierdzenie, wyświetla się komunikat „master odrzucony bez przewijania do przodu” i nie pozwala mi naciskać. Proszę wyjaśnić procedurę.

Sójka
źródło
Mam ten sam problem po utworzeniu nowego repozytorium za pomocą polecenia „Zainicjuj to repozytorium za pomocą pliku README”. Usunąłem ten i ponownie utworzyłem bez tego chechbox.
andrew
@andrew ma rację
Dany Wehbe

Odpowiedzi:

227

Miałem ten sam problem i udało mi się go naprawić. afk5min miał rację, problem polega na tym, że gałąź, z której pobrałeś kod, zmieniła się od tego czasu w zdalnym repozytorium. Zgodnie ze standardowymi praktykami git ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), musisz (teraz) scalić te zmiany w zdalnym repozytorium z lokalnymi zmianami przed może popełnić. Ma to sens, ponieważ zmusza Cię to do przyjęcia zmian innych i scalenia ich z kodem, zapewniając, że Twój kod będzie nadal działał z innymi zmianami w miejscu.

W każdym razie, przejdźmy do schodów.

  1. Skonfiguruj „pobieranie”, aby pobrać gałąź, z której pierwotnie pobrano.

  2. Pobierz zdalną gałąź.

  3. Scal ten zdalny oddział z lokalnym oddziałem.

  4. Zatwierdź (scal) zmianę w lokalnym repozytorium.

  5. Prześlij zmianę do zdalnego repozytorium.

Szczegółowo...

  1. W zaćmieniu otwórz widok „Repozytoria Git”.

  2. Upewnij się, że widzisz swoje lokalne repozytorium i widzisz repozytorium zdalne jako podfolder. W mojej wersji nazywa się Remotes i wtedy widzę w nim zdalny projekt.

  3. Poszukaj zielonej strzałki skierowanej w lewo, to jest strzałka „pobierz”. Kliknij prawym przyciskiem myszy i wybierz „Konfiguruj pobieranie”.

  4. Powinieneś zobaczyć identyfikator URI, upewnij się, że wskazuje na zdalne repozytorium.

  5. Zajrzyj do sekcji mapowania ref w wyskakującym okienku. Mój był pusty. To wskaże, które zdalne odniesienia chcesz pobrać. Kliknij „Dodaj”.

  6. Wpisz nazwę gałęzi, którą chcesz pobrać ze zdalnego repozytorium. Mój był `` mistrzem '' (przy okazji, lista rozwijana tutaj byłaby świetna !!, na razie musisz to wpisać). Kontynuuj przez wyskakujące okienko, ostatecznie klikając „Zakończ”.

  7. Kliknij „Zapisz i pobierz”. Spowoduje to pobranie zdalnego odniesienia.

  8. Zajrzyj do folderu „Branches” w swoim lokalnym repozytorium. Powinieneś teraz zobaczyć tę zdalną gałąź w folderze zdalnym. Znowu widzę „mistrza”.

  9. Kliknij prawym przyciskiem myszy lokalną gałąź w folderze „Lokalne” sekcji „Oddziały”, który nosi nazwę „master”. Wybierz „Scal”, a następnie wybierz oddział zdalny o nazwie „źródło / wzorzec”.

  10. Przetwarzaj przez scalanie.

  11. Zatwierdź wszelkie zmiany w swoim lokalnym repozytorium.

  12. Prześlij zmiany do zdalnego repozytorium.

  13. Idź na smaczny napój, gratulując sobie. Resztę dnia weź wolne.

Robert Bender
źródło
7
To powinno być oznaczone jako odpowiedź. Działał jak urok. Ten problem występuje, mimo że nie dodałem żadnych plików (zwykły plik README) po utworzeniu repozytorium na GitHub dla mojego projektu w Eclipse. Bardzo dziękuję za łatwe do naśladowania wyjaśnienie krok po kroku.
rbaleksandar
Rozwiązanie tego problemu zajęło mi rok, zanim przeczytałem Twój post. W moim przypadku nie miałem pilota, ale Eclipse utworzyło domyślny o nazwie „origin”.
Eugene van der Merwe
Super, wreszcie mogę połączyć się z Eclipse. Kluczową kwestią jest tutaj użycie widoku Repozytoria Git do scalenia, a nie zwykłego widoku Synchronizacja zespołu. Byłoby dobrze, gdyby w zespole widok synchronizacji eGit mógł wyłączyć wszystkie opcje, które nic nie robią.
dan Carter
1
Chociaż to działa, tworzy niepotrzebne zatwierdzenie scalające. Powinieneś użyć rebase tutaj, co jest w porządku, ponieważ twoje zmiany są tylko lokalne, więc nie zmieniasz żadnej opublikowanej historii (a jeśli to zrobiłeś, git i tak wrzeszczy na ciebie, że nie ma szybkiego przewijania do przodu). Podoba mi się odpowiedź MYN.
nyuszika7h
1
Kliknij prawym przyciskiem myszy projekt, a następnie Mergew głównym, a następnie kliknij ponownie prawym przyciskiem myszy na projekt push branch Masterzadziałał
user1207289
17

W moim przypadku zaznaczyłem Force Updatecheckbox podczas pchania. Zadziałało jak urok.

BSeitkazin
źródło
Dla mnie to też zadziałało. Stan PO miałem po „poprawieniu” zatwierdzenia. A funkcja „Fetch” dała mi „nic do przyniesienia”
Twilite
11

W międzyczasie (podczas aktualizacji projektu) do gałęzi „master” zostały wprowadzone inne zatwierdzenia. Dlatego musisz najpierw pobrać te zmiany, aby móc je wprowadzić.

afk5min
źródło
4
w tym przypadku git jest dość głupi, wszystkie zmiany wepchnąłem do pilota. i tylko ja pracuję nad projektem. Dlaczego do diabła muszę wyciągnąć pilota, zanim będę mógł ponownie nacisnąć ????
Wyciągnięta
7

Dotyczy Eclipse Luna + Eclipse Git 3.6.1

JA,

  1. sklonowane repozytorium git
  2. dokonał pewnych zmian w kodzie źródłowym
  3. etapowe zmiany z widoku przejściowego Git
  4. na koniec zatwierdź i naciśnij!

I napotkałem ten problem z EGit i oto jak go naprawiłem.

Tak, ktoś zatwierdził zmiany, zanim ja je zatwierdzę. Więc zmiany są odrzucane. Po tym błędzie zmiany zostaną faktycznie zatwierdzone do lokalnego repozytorium. Nie chciałem tylko Pullzmian, ponieważ chciałem zachować, linear historyjak wskazano w - W jakich przypadkach „git pull” może być szkodliwe?

Więc wykonałem następujące kroki

  1. z perspektywy repozytorium Git kliknij prawym przyciskiem myszy odpowiedni
    projekt Git
  2. select Fetch from Upstream- pobiera zdalne aktualizacje (odniesienia i obiekty), ale żadne aktualizacje nie są dokonywane lokalnie. aby uzyskać więcej informacji refer. Jaka jest różnica między „git pull” a „git fetch”?
  3. select Rebase...- to otwiera wyskakujące okienko, kliknij, aby Preserve merges during rebasezobaczyć, dlaczego
    Co dokładnie robi polecenie „rebase --preserve-scales” git (i dlaczego?)
  4. Kliknij Rebase button
  5. jeśli jest / są conflict(s), przejdź do kroku 6, w przeciwnym razie krok 11
  6. pojawi się Rebase Resultwyskakujące okienko, po prostu kliknijOK
  7. file comparatorotworzy się, musisz zmodyfikować left side file.
  8. po poprawnym scalaniu zmian przejdź do Git Stagingwidoku
  9. stage the changes. to znaczyadd to index
  10. w tym samym widoku kliknij Rebase-> Continue. powtarzaj od 7 do 10, aż wszystkie konflikty zostaną rozwiązane.
  11. w Historywidoku wybierz wiersz zatwierdzenia i wybierzPush Commit
  12. zaznacz Rebase Commits of local.......pole wyboru i kliknij dalej. zobacz dlaczego - Git: rebase na gałąź rozwojową z wyższego poziomu
  13. Kliknij Finish

Uwaga: jeśli masz wiele zatwierdzeń lokalnego repozytorium, musisz zgnieść je w jednym zatwierdzeniu, aby uniknąć wielokrotnych połączeń.

Yogesh Manware
źródło
Zgadzam się na używanie rebase zamiast merge. Jest lepsze, ponieważ nie tworzy niepotrzebnego zatwierdzenia scalającego. (Poza tematem: Stack Overflow jest całkowicie absurdalny i odrzuca mój komentarz wyłącznie na podstawie faktu, że pierwotnie napisałem „+1 dla”. Mój komentarz jest całkowicie konstruktywny, dziękuję.)
nyuszika7h
4

Konfiguruj Po wysłaniu kodu, gdy otrzymasz odrzuconą wiadomość, kliknij konfiguruj i kliknij Dodaj specyfikację, jak pokazano na tym obrazku

Odnośnik źródłowy i Odnośnik docelowy Rozwiń i kliknij ref / heads / yourbranchname i ponownie kliknij Add Spec

wprowadź opis obrazu tutaj Upewnij się, że wybrałeś wymuszoną aktualizację

wprowadź opis obrazu tutaj Na koniec zapisz i prześlij kod do repozytorium

Vineela Thonupunuri
źródło
3

Otwórz widok git:

1 - wybierz swój projekt i wybierz scalanie 2 - Wybierz zdalne śledzenie 3 - kliknij ok

Git połączy zdalną gałąź z lokalnym repozytorium

4- następnie naciśnij

dafali
źródło
2

Ten błąd oznacza, że ​​zdalne repozytorium miało inne zatwierdzenia i wyprzedziło twój lokalny oddział.
Próbuję zrobić git pull, a następnie git push. Jeśli nie ma żadnych sprzecznych zmian, git pull pobiera najnowszy kod do mojego lokalnego oddziału, zachowując moje zmiany nienaruszone.
Następnie git push wypycha moje zmiany do gałęzi głównej.

Puszkina
źródło
wydaje się, że wielu osobom brakuje tego prostego rozwiązania: D
Czarny
0

Odkryłem, że musisz być na najnowszym zatwierdzeniu gita. Oto kroki, które należy wykonać: 1) upewnij się, że nie pracowałeś na tych samych plikach, w przeciwnym razie napotkasz błąd DITY_WORK_TREE. 2) pobierz najnowsze zmiany. 3) zatwierdzaj aktualizacje.

Mam nadzieję że to pomoże.

Potężny żywiołak
źródło
-1
  1. Wejdź na Github i utwórz repozytorium dla swojego nowego kodu.
  2. Użyj nowego adresu URL https lub ssh w Eclise, gdy wykonujesz wypychanie na wyższy poziom;
adrian filipescu
źródło