2017-07-25 21 views
5

Właśnie skończyłem pracę nad kawałkiem kodu. Chciał pchnąć i dostał już sławny:git: "Aktualizacje zostały odrzucone, ponieważ podpowiedź aktualnej gałęzi jest za ...", ale jak wyświetlić różnice?

podpowiedź: Aktualizacje zostały odrzucone, ponieważ końcówka bieżącego oddziału jest za podpowiedź: jego zdalny odpowiednik. Zintegruj zdalne zmiany (np. Podpowiedź: "git pull ...") przed ponownym naciśnięciem.

Teraz widziałem to pytanie kilka razy tutaj, np.

Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g

Updates were rejected because the tip of your current branch is behind

Według konkretnego przypadku, rozwiązaniem jest albo

  • git pull, więc zdalne zmiany są połączyła na moim lokalnym pracy lub
  • git push -f, naciśnięcie przycisku, aby zaktualizować gałąź zdalnego (początkowego).

Minęło już trochę czasu, nie pracowałem w tej branży. Niekoniecznie chcę scalić zdalnych zmian w mojej obecnej pracy! Nie wiem, czy mogę bezpiecznie wymuszenie aktualizacji w oddziale początkowym ...

Jak mogę zobaczyć różnice i zdecydować, który jest najlepszy dla mojej sprawy?

+0

Prawdopodobnie nie można uniknąć tarcia, jeśli chcesz wprowadzić zmiany do oddziału zdalnego. Najlepszym sposobem działania jest aktualizacja lokalnego oddziału za pomocą zdalnych zmian. Póki co, możesz spróbować po prostu połączyć się jako suchy bieg, aby zobaczyć, jak poważne mogą być konflikty. –

+1

'git push -f' odrzuca wszystkie postępy wykonane do zdalnego repozytorium przez inne osoby, chyba że jest to twoje osobiste repozytorium, którego prawdopodobnie nie chcesz. – max630

Odpowiedz

3

aby zobaczyć różnice, najpierw trzeba pobierać zobowiązuje z repozytorium pochodzenia:

git fetch origin

Teraz widać dyferencjału (zakładając, że jesteś na gałęzi master) git diff HEAD..origin/master

Teraz jesteś uzbrojony w wiedzę, którą chcesz zadecydować o merge lub rebase przed push swoimi zmianami.

+2

Dwie punkty łączą różnice dokonane w odległych i lokalnych oddziałach. W takim przypadku lepiej użyć opcji [dyferencjał z trzema kropkami] (https://git-scm.com/docs/git-diff#git-diff-emgitdiffem--optionsltcommitgtltcommitgt--ltpathgt82308203), aby zobaczyć zmiany charakterystyczne dla obu strona lokalna lub zdalna. – max630

0

Jeśli chcesz odrzucić lokalne zmiany powinieneś uruchomić git reset --hard @{u}. Zauważ, że jest to nieodwracalna czynność z pewnymi danymi, więc upewnij się przed uruchomieniem. Oto, jak:

Aby sprawdzić, które lokalne zatwierdzenia obecnie masz, możesz użyć git log HEAD --not --remotes, aby porównać z dowolnym oddziałem zdalnym lub git log @{u}..HEAD, aby zobaczyć różnice specyficzne dla śledzonej gałęzi.

Aby zobaczyć rzeczywistą różnicę, którą popełniłeś lokalnie, uruchom git diff @{u}.... Ignoruje to zdalny postęp i pokazuje tylko twoje zmiany.

Aby wyświetlić niezatwierdzone zmiany, uruchom git diff HEAD.

PS: Powinieneś najpierw uruchomić git fetch origin lub git remote update, aby zaktualizować odniesienia do śledzenia.