2013-06-11 4 views
1

Скажите, что я делаю кучу изменений в своих файлах локально, а затем добавляю эти изменения в индекс промежуточной записи, а затем фиксирую их. Затем я понимаю, что на самом деле, я допустил некоторые ошибки, и я хочу быстро отменить эту целую сделку и вернуться к тому, где был до того, как я совершил (т. Е. С моими изменениями из репо и обратно в индексе).Git revert перезаписывает мои файлы

Я попытался сделать git revert SHA, и это действительно отменило мою последнюю фиксацию, но она также полностью перезаписала все мои файлы и вернула их в исходное состояние.

Как вернуть фиксацию без перезаписывания моих изменений?

ответ

3

Вы ищете git reset --soft <last commit you want to keep>.

Однако обратите внимание, что в отличие от revert, отменяются все фиксаций после того, где вы находитесь (например, если у вас есть A-B-C-D (HEAD) и вы git reset --soft B, как будет отменено C и D, как с их изменений, оставшихся в индексе) ,


Конечно, еще один вариант, чтобы не отменить последний коммит, но вместо того, чтобы просто изменить его, чтобы избавиться от ошибок. Вы можете сделать это через git commit --amend, который действует как git commit, за исключением того, что вместо создания нового коммита он изменяет (изменяет) последнюю существующую фиксацию.

git commit -m "this commit has mistake(s)" 
...edit the file(s) with mistake(s)... 
git add <file> 
git commit --amend -m "same commit, no mistake(s)"