Как мне отменить последние локальные коммиты в Git?
Отменить фиксацию немного source-code-management страшно, если вы не знаете, как revision-control это работает. Но на самом git-commit деле это удивительно просто, если revision-control вы понимаете. Я покажу вам revision-control 4 различных способа отмены source-code-management фиксации.
вариант 1: git reset --hard
Допустим, у вас source-code-control есть это, где C - это ваша vcs ГОЛОВКА, а (F) - состояние scc ваших файлов.
(F)
A-B-C
↑
master
Вы хотите удалить коммит C и никогда больше его не увидеть и потерять все изменения в локально измененных файлах. Вы version-control делаете это:
git reset --hard HEAD~1
Результат:
(F)
A-B
↑
master
Теперь source-code-control B - ГОЛОВА. Поскольку вы source-code-management использовали --hard
, ваши файлы revision-control сбрасываются в свое состояние revision-control при фиксации Б.
вариант 2: git reset
А, но предположим, что scm фиксация C не была катастрофой, а git-commit просто немного ошиблась. Вы git-commit хотите отменить фиксацию, но сохранить свои изменения для небольшого редактирования, прежде undo чем вы сделаете более точную scc фиксацию. Начнем снова с git-commands C в качестве ГОЛОВКИ:
(F)
A-B-C
↑
master
Вы можете vcs сделать это, оставив --hard
:
git reset HEAD~1
В этом source-code-control случае результат:
(F)
A-B-C
↑
master
В обоих source-code-management случаях HEAD - это просто source-control указатель на последнюю фиксацию. Когда scm вы выполняете git reset HEAD~1
, вы указываете source-code-control Git переместить указатель git-commit HEAD назад на одну фиксацию. Но revision-control (если вы не используете --hard
) вы git-commands оставляете свои файлы такими, какими source-control они были. Итак, теперь git status
показывает git-commit изменения, которые вы отметили source-control в C. Вы ничего не потеряли!
вариант 3: git reset --soft
Для source-code-control легкого прикосновения вы sccs можете даже отменить фиксацию, но оставить свои файлы и свой index:
git reset --soft HEAD~1
Это не только sccs оставляет ваши файлы в покое, но git и оставляет в покое ваш индекс. Когда git-commit вы выполните git status
, вы увидите, что scc в индексе находятся те же sccs файлы, что и раньше. Фактически, сразу scm после этой команды вы можете source-code-management выполнить git commit
и повторить только source-code-management что сделанную фиксацию.
вариант 4: вы выполнили git reset --hard
и вам нужно получить этот код назад
И source-code-management еще кое-что: Предположим, вы уничтожили фиксацию, как в первом git-commands примере, но потом обнаружили, что она вам все-таки нужна? Не повезло, правда?
Нет, есть scc все еще способ вернуть его. Введите undo git reflog
, и вы увидите список (частичных) фиксаций undo shas (то есть хэшей), в которые scm вы переместились. Найдите git-commands уничтоженную фиксацию и сделайте undo следующее:
git checkout -b someNewBranchName shaYouDestroyed
Теперь вы воскресили source-control этот коммит. На самом деле source-code-control коммиты не уничтожаются в git-commands Git в течение примерно 90 git-commands дней, поэтому вы обычно можете source-control вернуться и спасти тот, от undo которого не собирались избавляться.
git
version-control
git-commit
undo
Как мне отменить последние локальные коммиты в Git?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.