Как мне отменить последние локальные коммиты в 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

2022-11-21T06:30:39+00:00