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