Вопрос

Моя проблема в том, что я изменил файл, например: 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^

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

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

It should look like this.

Затем вы получите сообщение, в котором говорится 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top