Как отменить локальную фиксацию 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?
.
Если вы находитесь в середине фиксации (т. е. уже в вашем редакторе), вы можете отменить ее, удалив все строки выше первого #
. Это отменит обязательство.
таким образом, вы можете удалить все строки, чтобы сообщение фиксации было пустым, а затем сохранить файл:
вы получите сообщение, которое говорит 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
вот разницу софт и жесткий