Как отменить местный коммит GIT
-
27-10-2019 - |
Вопрос
Моя проблема в том, что я изменил файл, например: 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. Этого не должно произойти. Мне нужен контент, чтобы быть там. Есть ли способ сохранить контент и отменить мой локальный коммит?
Решение
Просто используйте git reset
без --hard
флаг:
git reset HEAD~1
PS: в системах на основе UNIX вы можете использовать HEAD^
который равен HEAD~1
. Анкет В окнах HEAD^
не будет работать, потому что ^
сигнализирует продолжение линии. Так что ваша командная строка просто спросит вас More?
.
Другие советы
Использовать --soft
вместо --hard
флаг:
git reset --soft HEAD^
Если вы находитесь в середине коммита (т.е. уже в вашем редакторе), вы можете отменить его, удалив все строки над первыми #
. Анкет Это прервут коммит.
Таким образом, вы можете удалить все строки, чтобы сообщение было пустым, а затем сохраните файл:
Затем вы получите сообщение, в котором говорится Aborting commit due to empty commit message.
.
РЕДАКТИРОВАТЬ:
Вы также можете удалить все Линии и результат будут точно такими же.
Чтобы удалить все строки в VIM (если это ваш редактор по умолчанию), как только вы находитесь в редакторе, введите gg
перейти на первую строку, затем dG
Удалить все строки. Наконец, напишите и бросьте файл с wq
И ваш коммит будет прерван.
Первое, что вы должны сделать, это определить, хотите ли вы сохранить локальные изменения, прежде чем удалить сообщение Commit.
Использовать git log
Чтобы показать текущие сообщения о коммите, затем найдите commit_id
до Коммит, который вы хотите удалить, а не коммит, который вы хотите удалить.
Если вы хотите сохранить локально измененные файлы и просто удалить сообщение о коммите:
git reset --soft commit_id
Если вы хотите удалить все локально измененные файлы и сообщение о коммите:
git reset --hard commit_id
В этом разница мягкий а также жесткий
Вы можете сказать GIT, что делать с вашим индексом (набор файлов, которые станут следующим коммитом) и рабочим каталогом при выполнении GIT сброс с помощью одного из параметров:
--soft
: Только коммиты будут сброшены, в то время как индекс и рабочий каталог не изменены.
--mixed
: Это сбросит индекс в соответствии с головой, в то время как рабочий каталог не будет затронут. Все изменения останутся в рабочем каталоге и будут выглядеть как модифицированные.
--hard
: Он сбрасывает все (коммиты, индекс, рабочий каталог), чтобы соответствовать головке.
В вашем случае я бы использовал git reset --soft
Чтобы сохранить измененные изменения в индексе и рабочем каталоге. Обязательно проверьте это Для более подробного объяснения.
Используйте ниже команду: $ git сбросить головку ~ 1 После этого вы также сможете просматривать файлы, которые возвращаются обратно, как ответ ниже.
Unstaged изменение после сброса: M Application/config/config.php m Application/config/database.php