Twój oddział wyprzedza „origin / master” o 3 zatwierdzenia

354

Podczas uruchamiania otrzymuję następujące informacje git status

Your branch is ahead of 'origin/master' by 3 commits.

Przeczytałem w innym wpisie, jak to naprawić jest uruchamiane, git pull --rebaseale czym dokładnie jest rebase, czy stracę dane, czy jest to prosty sposób synchronizacji z masterem?

FluxEngine
źródło
19
Nie sądzę, że jest to duplikat ... To pytanie pyta, co to znaczy, a drugie pytanie, jak odrzucić zmiany.
onionjake
11
Jak wiele osób oznaczyło to jako duplikat? Pytanie oczywiście wskazuje, że osoba nie chce stracić swoich zmian. Wprowadzili zmiany i są zdezorientowani wiadomością. Tak zwane zduplikowane pytanie spowodowałoby utratę przez osobę zmian.
Derek Greer
4
Muszę powiedzieć, że powyższe pytanie nie jest tak naprawdę duplikatem tego pytania ...
Dave Kanter
15
@DerekGreer: jak to oznaczono jako duplikat? Ponieważ większość osób oznaczających pytania jako duplikaty nie zadaje sobie trudu, aby przeczytać i zrozumieć pytanie. Jeśli istnieją powierzchowne podobieństwa, dojdą do wniosku, że oba są identyczne, i to do OP lub innych, którzy zechcą poświęcić czas na dokładne powtórzenie tego, co powinno być oczywiste w pierwszej kolejności, jeśli łowcy dupków naprawdę chcieli zwracać uwagę.
iconoclast
6
^^^, której praktyką jest zabijanie SO, IMO.
Geek Stocks

Odpowiedzi:

766

Otrzymujesz tę wiadomość, ponieważ wprowadziłeś zmiany w lokalnym systemie głównym i nie wypchnąłeś ich na odległość. Istnieje kilka sposobów, aby go „rozwiązać” i zwykle zależy to od tego, jak wygląda przepływ pracy:

  • W dobrym przepływie pracy zdalna kopia wzorca powinna być poprawna, podczas gdy lokalna kopia wzorca jest po prostu kopią zdalnej. Korzystając z tego przepływu pracy, nigdy więcej nie otrzymasz tej wiadomości.
  • Jeśli pracujesz w inny sposób, a lokalne zmiany powinny zostać wprowadzone, to git push originzakładając, że źródłem jest Twój pilot
  • Jeśli lokalne zmiany są złe, po prostu je usuń lub zresetuj lokalnego mastera do stanu na pilocie git reset --hard origin/master
iberbeu
źródło
82
git reset - twarde pochodzenie / master jest dokładnie tym, czego szukałem. Dzięki.
FluxEngine
4
@iberbeu rozwiązałeś mój dzień ... git reset - twarde pochodzenie / mistrz jest tym, czego szukam. + 1ed
Ravi
75
Również fwiw git diff master origin/master(tj. git diff local remote), Aby zobaczyć zmiany, które usuniesz
Shanimal,
1
Mam local / master na zdalnym źródle / oddziale, więc za pomocą git push origin master:branchktórego powróciłem Everything up-to-date, wiadomość o wyprzedzeniu przez x zatwierdzeń zniknęła.
fyrye
2
Ostatni przyniósł mi to, czego potrzebowałem!
RyanG,
38

Nie ma nic do naprawienia. Po prostu dokonałeś 3 zatwierdzeń i jeszcze nie przeniosłeś ich do zdalnego oddziału. Istnieje kilka opcji, w zależności od tego, co chcesz zrobić:

  • git push: przenieś zmiany do pilota (może to zostać odrzucone, jeśli są już inne zmiany na pilocie)
  • nic nie rób i kontynuuj kodowanie, zsynchronizuj kolejny dzień
  • git pull: pobierz zmiany (jeśli istnieją) z pilota i scal je ze swoimi zmianami
  • git pull --rebase: jak wyżej, ale spróbuj powtórzyć swoje zatwierdzenia nad zdalnymi zmianami

Jesteś w klasycznej sytuacji (chociaż zwykle w większości przepływów pracy nie poświęciłbyś dużo pracy masterowi). Oto, co normalnie zrobiłbym: Przejrzyj moje zmiany. Może zrób git rebase --interactivena nich kosmetyki, upuść te, które ssą, uporządkuj je, aby były bardziej logiczne. Teraz przenieś je do pilota za pomocą git push. Jeśli zostanie to odrzucone, ponieważ mój lokalny oddział jest nieaktualny: git pull --rebasepowtórzyć moją pracę na podstawie najnowszych zmian i git pushjeszcze raz.

pmr
źródło
Użyłem git pull --rebase, ale teraz mówi mi, że wyprzedzam jedno zatwierdzenie
FluxEngine
Dokonałem więc zmian, skierowałem się do mistrza, a następnie kierownictwo naszego zespołu połączyło się z mistrzem. Więc zmiany są tam, muszę tylko zsynchronizować się z bieżącym masterem.
FluxEngine
@MartyMcFly Trudno zobaczyć, co się tutaj dzieje. Mówisz, że już naciskałeś? Więc dlaczego nadal zatwierdzasz, których nie ma na masterie? Co masz na myśli your team lead merged to master? Nie mówiłeś, że już naciskasz na opanowanie? Co zawiera dodatkowe zatwierdzenie? Spróbuj git diff origin/masterzobaczyć, jak Twój lokalny oddział różni się od zdalnego.
pmr
1
dziękuję za pomoc, przepraszam, jeśli źle wykonałem wyjaśnienie sytuacji. Ale to, czego szukałem, to git reset - hard origin / master. Ale twoja odpowiedź była pomocna +1.
FluxEngine
Wydaje mi się, że utknąłem między kamieniem a trudnym miejscem, próbowałem dokonać zmian, a potem git powiedział: masz przed sobą 11 zobowiązań. Nie wolno mi aktualizować zdalnego repozytorium, więc wypychanie nie jest możliwe. „git pull” mówi: już aktualne. Wypróbowałem więc twoją trzecią sugestię, ale potem git mówi: nie mogę wyciągnąć z bazy: masz niesceniczne zmiany. proszę je zatwierdzić lub ukryć. O tak, oto jak się tu dostałem :-(
Sander de Jong,
36

Użyj tych 4 prostych poleceń

Krok 1 :git checkout <branch_name>

To oczywiste, aby przejść do tej gałęzi.

Krok 2 :git pull -s recursive -X theirs

Wprowadź zmiany w oddziale i zastąp je zmianami, jeśli wystąpi konflikt. Tutaj, jeśli to zrobisz git status, otrzymasz coś takiego, że twoja gałąź wyprzedza „origin / master” o 3 commity.

Krok 3 :git reset --hard origin/<branch_name>

Krok 4 :git fetch

Twarde resetowanie oddziału.

Cieszyć się.

Abhishek Goel
źródło
17

Pojawił się ten problem po scaleniu żądania ściągnięcia na Bitbucket.

Musiał zrobić

git fetch

i to było to.

pragman
źródło
2
Pracowałem z repozytorium z pakietu i byłem w stanie pozbyć się tej wiadomości, stosując „git fetch” do bieżącego pakietu. tnx!
Martin Meeser,
W kasie tylko do odczytu mój status gita pokazał, że miałem 2 zatwierdzenia do przodu, dziennik wyglądał tak, jak powinien - wszystkie zatwierdzenia w źródle. Zrobiłem git pull i miałem 5 zobowiązań do przodu .. WFF ???? Wystarczy pobrać, aby odświeżyć lokalne indeksy ... wszystko dobrze :)
Chris Rutledge
12

Zwykle, jeśli muszę sprawdzić, które są zatwierdzenia różniące się od wzorca, robię:

git rebase -i origin/master

W ten sposób widzę zatwierdzenia i decyduję się je upuścić lub wybrać ...

Alex
źródło
Ta skromna odpowiedź na dole była tym, co musiałem zrobić. Nie mogłem wymyślić, jak znaleźć różnicę, a wszystkie moje różne git diff ...magie nie działałyby. Kiedy to zrobiłem, dało mi noopto jedyne zatwierdzenie, a kiedy je zaakceptowałem, teraz moja gałąź jest zsynchronizowana z origin / master. Wygląda więc na to, że commits diff od origin / master były w rzeczywistości niczym.
philo vivero
11

Ta wiadomość gitoznacza, że ​​dokonałeś trzech zatwierdzeń w lokalnym repozytorium i nie opublikowałeś ich w masterrepozytorium. Poleceniem do uruchomienia jest togit push {local branch name} {remote branch name} .

Polecenie git pull(i git pull --rebase) dotyczy innej sytuacji, gdy na zdalnym repozytorium istnieją zatwierdzenia, których nie ma w repozytorium lokalnym. Ta --rebaseopcja oznacza, że gitprzeniesie lokalne zatwierdzenie na bok, zsynchronizuje się ze zdalnym repozytorium, a następnie spróbuje zastosować trzy zatwierdzenia z nowego stanu. Może się nie powieść, jeśli wystąpi konflikt, ale wtedy pojawi się monit o ich rozwiązanie. Możesz także przerwać, rebasejeśli nie wiesz, jak rozwiązać konflikty za pomocą, git rebase --aborta wrócisz do stanu przed uruchomieniem git pull --rebase.

Sylvain Defresne
źródło
7

Jeśli twój dupek mówi, że zatwierdzasz z wyprzedzeniem, to po prostu Pierwszy,

git push origin

Aby upewnić się, że opublikowałeś wszystkie swoje najnowsze prace w repo

Następnie,

git reset - twarde pochodzenie / master

Aby zresetować i dopasować do repozytorium

Pratik Khadka
źródło
4

Zdarzyło mi się to raz po tym, jak połączyłem żądanie ściągnięcia na Bitbucket.

Musiałem tylko:

git fetch

Mój problem został rozwiązany. Mam nadzieję, że to pomoże!!!

Sudhir Vishwakarma
źródło
0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

Wreszcie:

$ git push origin
sandes
źródło