Понякога, когато работите с Git, може да искате да отмените най-новия коммит. Фиксацията е моментна снимка на Git хранилище в даден момент. Git има референтна променлива, наречена ГЛАВА
което сочи към последния ангажимент в текущия работещ клон. За да отмените ангажимент, всичко, което трябва да направите, е да посочите ГЛАВА
променлива към предишната снимка.
Това ръководство обяснява как да отмените последния Git коммит.
Не се препоръчва да отмените ангажимент, който вече е изпратен в споделено хранилище. Ако искате да промените само съобщението за фиксиране, разгледайте тази статия .
Git Архитектура от три дървета #
В Git можете да отмените промените с помощта на git нулиране
команда, последвана от идентификатора на фиксиране.
git нулиране
взема допълнителни аргументи, които ви позволяват да контролирате поведението на командите. За да разберем по-добре как нулиране
работи, нека поговорим за трите различни дървета на Git. Архитектурата от три дървета е ключовата концепция на системата за управление на Git. Те се наричат дървета, защото представляват колекции от файлове.
Git управлява и манипулира следните три дървета:
- Работната директория - Директория, включваща всички поддиректории и файлове в локалния файлysys-tem, който е свързан с хранилището. Често се нарича „работещо дърво“. Работната директория е нещо като пясъчник, където можете да тествате промените, преди да ги ангажирате в индекса за подреждане.
- Индексът - Това дърво проследява новите или променените файлове, които са добавени към индекса с
git add
, да бъдат включени в следващия ангажимент. Често се споменава като „зона на подреждане“ или „индекс на подреждане“. - The
ГЛАВА
- Указател към последния ви ангажимент в текущия клон.
The git нулиране
команда има три аргумента, които съответстват на трите дървета:
--мека
- АктуализираГЛАВА
указател към дадения ангажимент. Работната директория и индексът не се променят.--смесени
- АктуализираГЛАВА
указател и нулира индекса към посочения фиксат. Работната директория остава недокосната. Това е режимът на работа по подразбиране нанулиране
команда.--трудно
- АктуализираГЛАВА
указател и нулира индекса и работната директория до посочения фиксиране. Бъдете особено внимателни, когато използвате тази опция, тъй като всички локални промени, които не сте извършили, ще бъдат заменени и загубени.
Отмяна на последния фиксиран номер
За да отмените последния ангажимент, без да загубите направените от вас промени в локалните файлове и индекса, извикайте git нулиране
с --мека
опция, последвана от ГЛАВА ~ 1
:
git reset --soft HEAD ~ 1
ГЛАВА ~ 1
е променлива, която сочи към предишния коммит. Командата по-горе премества текущия клон назад с един ангажимент, като ефективно отменя последния ви ангажимент. Ако стартирате git статус
команда, ще видите, че променените файлове са изброени като неангажирани промени.
За да актуализирате ГЛАВА
указател за нулиране на индекса, изпълнете git нулиране
с --смесени
или без опция:
git reset --mixed HEAD ~ 1
git reset HEAD ~ 1
Променените файлове се поддържат, но за разлика от предишния пример, сега промените не се организират за фиксиране.
Ако не искате да запазите промените, които сте направили във файловете, извикайте git нулиране
команда с --трудно
опция:
git reset --hard HEAD ~ 1
Преди да извършите хардуерно нулиране, уверете се, че вече не се нуждаете от промените.
Отмяна на множество ангажименти #
С git нулиране
, можете да се върнете към всеки предишен ангажимент.
Например, за да преместите текущия клон назад с три фиксации, ще използвате:
git reset --hard HEAD ~ 3
Тъй като използваме --трудно
, командата по-горе ще премахне последните три снимки от историята на фиксиране.
Друг начин да се върнете към определен ангажимент е да предадете идентификатора на ангажимента на git нулиране
команда.
Използвайте git log --oneline
за да намерите идентификаторите на фиксиране:
git log --oneline
Командата ще покаже списък на всички фиксирания, включително ID и първия ред на съобщението за фиксиране:
32921222 (HEAD -> master) Актуализация на дневника за промени 7505724c добавяне на нови тестове 750862ce нов пост в блога 95a63417 сортиране на конфигурационен файл 252032e4 Refactor потребителски клас ..
След като разберете идентификатора на фиксацията, към който искате да нулирате, просто предайте идентификатора на git нулиране
команда:
git нулиране - твърд 95a63417
Заключение №
За да отмените последния фиксиране, използвайте git нулиране
команда. Не нулирайте натиснатите ангажименти, тъй като това може да причини много проблеми на вашите колеги.
Ако срещнете проблем или имате обратна връзка, оставете коментар по-долу.