Как отменить локальный коммит в git'е


моя проблема в том, что я изменил файл, например: README, добавил новую строку'это для моей линии испытания ' и сохранил файл, Затем я выдал следующие команды

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

Я не нажимал код на github, теперь я хочу отменить эту фиксацию.

для этого я использовал

   git reset --hard HEAD~1

но я потерял недавно добавленную строку'это для моей линии испытания из файла README. Этого не должно произойти. Мне нужно, чтобы содержание было там. Is есть способ сохранить содержимое и отменить мою локальную фиксацию?

6 521

6 ответов:

просто использовать git reset без --hard флаг:

git reset HEAD~1

PS: В системах на базе Unix вы можете использовать HEAD^ что равно HEAD~1. На Windows HEAD^ не будет работать, потому что ^ сигнализирует о продолжении линии. Так что ваша командная строка просто спросит вас More?.

использовать --soft вместо --hard флаг:

git reset --soft HEAD^

Если вы находитесь в середине фиксации (т. е. в вашем редакторе уже), вы можете отменить ее, удалив все строки выше первой #. Это приведет к прерыванию фиксации.

таким образом, вы можете удалить все строки, чтобы сообщение фиксации было пустым, а затем сохранить файл:

It should look like this.

вы получите сообщение, которое говорит Aborting commit due to empty commit message..

вы можете сказать Git, что делать с вашим индексом (набором файлов, которые станут следующим фиксатором) и рабочим каталогом при выполнении сброса git, используя один из параметров:

--soft: будут сброшены только коммиты, а индекс и рабочий каталог не будут изменены.

--mixed: это приведет к сбросу индекса в соответствии с головкой, в то время как рабочий каталог не будет затронут. Все изменения останутся в рабочем каталоге и будут выглядеть следующим образом модифицированный.

--hard: он сбрасывает все (коммиты, индекс, рабочий каталог), чтобы соответствовать голове.

в вашем случае, я бы использовал git reset --soft чтобы сохранить измененные изменения в индексе и рабочем каталоге. Будьте уверены, чтобы проверить это для более подробного объяснения.

использовать ниже команду: $ git reset HEAD~1 После этого вы также можете просматривать файлы, которые возвращаются назад, как показано ниже ответа.

неиндексированных изменений после перезагрузки: Применение м/конфигурация/конфиг.РНР M application / config / database.php

первое, что вы должны сделать, это оправдать, хотите ли вы сохранить изменения, прежде чем удалить сообщение.

использовать git log чтобы показать текущие сообщения фиксации, затем найдите commit_id перед удалением, а не только тот, который вы хотите удалить.

если вы хотите сохранить локально измененные файлы, просто удалите сообщение:

git reset --soft commit_id

если вы хотите удалить все локально измененные файлы и фиксации сообщение:

git reset --hard commit_id

вот в чем разница софт и жесткий