Как отменить локальную фиксацию 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. Этого не должно быть. Мне нужно, чтобы контент был там. Есть ли способ сохранить контент и отменить мой локальный коммит?

397
задан 31 янв. '11 в 15:14
источник поделиться
3 ответов

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

git reset HEAD~1

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

758
ответ дан 31 янв. '11 в 15:17
источник

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

git reset --soft HEAD^
80
ответ дан 10 авг. '12 в 11:02
источник

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

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

Это должно выглядеть так.

Затем вы получите сообщение с сообщением Aborting commit due to empty commit message..

9
ответ дан 10 марта '17 в 0:09
источник

Другие вопросы по меткам или Задайте вопрос