Git, jak zresetować origin / master do commita?

Zresetowałem lokalnego mistrza do commita za pomocą tego polecenia:

git reset --hard e3f1e37

Kiedy wprowadzę $ git status polecenie, terminal mówi:

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

Ponieważ chcę również zresetować origin / header, przechodzę do origin/master:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

I zresetuj nagłówek poleceniem:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

Następnie próbowałem dodać commit do origin / header, że nie udało mi się.

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean
W końcu wymeldowałem się do lokalnego mistrza.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Ponieważ zresetowałem głowę pochodzenia / mistrza oczekuję lokalnego i origin powinien być w tym samym kierunku, ale jak widzisz, git mówi, że mój lokalny / master stoi za origin / master przez 7 commitów.

Jak mogę rozwiązać ten problem? Rzeczy, których szukam to Head of local / master i origin / master wskazują na ten sam commit. Poniższy obrazek pokazuje, co zrobiłem. Dzięki.

Tutaj wpisz opis obrazka

Author: Hesam, 2013-07-16

3 answers

origin/xxx gałęzie są zawsze wskaźnikiem do pilota. Nie można ich sprawdzić, ponieważ nie są one wskaźnikiem do lokalnego repozytorium (można tylko sprawdzić commit. Dlatego nie zobaczysz nazwy zapisanej w znaczniku gałęzi interfejsu wiersza poleceń, tylko hash zatwierdzania).

To, co musisz zrobić, aby zaktualizować pilota, to wymusić wypchnięcie lokalnych zmian do master:
git checkout master
git reset --hard e3f1e37
git push --force origin master
# Then to prove it (it won't print any diff)
git diff master..origin/master
 424
Author: Simon Boudrias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-16 02:30:37

Rozwiązanie znalezione Tutaj pomogło nam zaktualizować master do poprzedniego commita, który został już wypchnięty:

git checkout master
git reset --hard e3f1e37
git push --force origin e3f1e37:master

Kluczową różnicą od zaakceptowanej odpowiedzi jest hash zatwierdzania "e3f1e37:" przed master w poleceniu push.

 36
Author: jkovacs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-19 18:44:43

Ponieważ miałem podobną sytuację, pomyślałem, że podzielę się swoją sytuacją i tym, jak te odpowiedzi mi pomogły (dziękuję wszystkim).

Postanowiłem więc pracować lokalnie, zmieniając mój ostatni commit za każdym razem, gdy chciałem zapisać swoje postępy na głównej gałęzi (wiem, powinienem był rozgałęziać się, angażować się na tym, naciskać i Później scalać z powrotem do master).

Pewnej późnej nocy, w paranoicznym strachu przed utratą mojego postępu do awarii sprzętu lub czegoś z eteru, postanowiłem wcisnąć master do pochodzenie. Później ciągle zmieniałem swoją lokalną gałąź master i kiedy zdecydowałem, że nadszedł czas na ponowne naciśnięcie, miałem do czynienia z różnymi gałęziami master i dowiedziałem się, że nie mogę zmienić origin/upstream (duh!) Jak mogę lokalne oddziały rozwoju.

Więc nie checkout master lokalnie, ponieważ byłem już po commit. Mistrz pozostał bez zmian. Nawet nie musiałem resetować --ciężko, mój obecny commit był OK.

Po prostu zmusiłem push do origin, nawet nie precyzując, jaki commit chcę siła na mistrzu, ponieważ w tym przypadku to jest to, co jest w głowie. Sprawdzone git diff master..origin/master więc nie było żadnych różnic i tyle. Wszystko naprawione. Dzięki! (Wiem, jestem Git newbie, proszę wybaczyć!).

Więc jeśli jesteś już OK z gałęzi master lokalnie, po prostu:

git push --force origin master
git diff master..origin/master
 0
Author: brokenthorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 15:26:58