Как отменить локальную фиксацию 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 ответов


просто использовать 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 в голову сбросить~1 После этого вы также можете просматривать файлы, которые возвращаются назад, как показано ниже.

неустановленные изменения после сброса: M application / config / config.РНР M приложение / конфигурация / база данных.в PHP


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

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

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

git reset --soft commit_id

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

git reset --hard commit_id

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