Има ли някакъв начин да се отменят ефектите от git revert head?

Случайно изпълних командата срещу грешен клон в моето хранилище - има ли начин да отменя тази промяна?


person blueberryfields    schedule 07.09.2010    source източник
comment
След като прочетох документацията за нулиране въз основа на съветите по-долу, git reset --hard head~1 го реши за мен.   -  person blueberryfields    schedule 08.09.2010


Отговори (4)


git revert просто създава нов ангажимент -- можете да го "премахнете" с git reset --hard HEAD^ (все пак бъдете по-внимателни с него!)

person Roman Cheplyaka    schedule 07.09.2010
comment
Бъдете внимателни с git reset --hard HEAD^, тъй като ще премахне всички незавършени промени. - person Jeremen; 07.02.2016
comment
Ако направите git stash преди git reset --hard HEAD^, можете да запазите незавършените си промени. След git reset --hard HEAD^ направете git stash pop, за да презаредите некоммитираните промени в текущия клон. - person kukko; 28.11.2016

Командата git revert просто създава ангажимент, който отменя друг. Трябва да можете да стартирате git revert HEAD отново и той ще отмени предишното ви отмяна и ще добави друг ангажимент за това. Или можете да направите git reset --hard HEAD~. Но внимавайте с последното, тъй като изтрива данни.

HEAD~ означава ангажиментът преди текущия HEAD

person jonescb    schedule 07.09.2010
comment
Не, не изтрива данни. Той просто премества показалеца на вашия клон. Предишният ангажимент все още съществува и можете да видите неговия идентификатор, като погледнете git reflog (f.ex.). Той ще бъде събран за боклук след два месеца (конфигурация по подразбиране), но можете да изключите автоматичното събиране на боклука и след това всеки един ангажимент, който някога сте направили, ще съществува завинаги в това хранилище. Те просто не са достъпни чрез клонове. Но винаги можете да ги намерите с помощта на git fsck и аз публикувах рецепта за разглеждане на всички ангажименти, които използват това. - person Aristotle Pagaltzis; 08.09.2010

Какво ще кажете за връщане на връщането?

Вижте git log и вземете хеш маркера на лошото връщане:

git log -5

След това обърнете самото връщане:

git revert

person Lasma    schedule 25.09.2012
comment
-1 това ще създаде друг ангажимент, който всъщност не е желан тук - person CharlesB; 25.09.2012

Ако сте били достатъчно далновидни, за да направите това: revert --no-commit master, можете да прекъснете това с: git revert --abort според git status съвета:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
You are currently reverting commit dcc7c46.
  (all conflicts fixed: run "git revert --continue")
  (use "git revert --abort" to cancel the revert operation)
person ericP    schedule 24.03.2018