Как вернуть папку в конкретную фиксацию, создав патч
Здесь моя история для папки "somefolder"
$ git log somefolder
commit 89cd
More changes to somefolder
commit ef47a
Updating somefolder and other stuff
commit e095
Bugs fixed in somefolder
Я хочу вернуть некоторую папку обратно в "Исправленные ошибки в некоторой папке".
Поскольку вторая фиксация связана с изменениями за пределами некоторой папки, я не хочу возвращать эту фиксацию.
Я думаю, самым безопасным способом было бы создать diff/patch между commit e095 и 89cd, который применяется только к некоторой папке, а затем применить этот патч. Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать git checkout, чтобы обновить ваш репозиторий до определенного состояния.
git checkout e095 -- somefolder
Что касается вашего вопроса о создании diff, это тоже сработает. Просто сгенерируйте diff для перехода от текущего состояния к e095
:
git diff 89cd..e095 -- somefolder
Ответ 2
Вы можете использовать git reset
to reset индекс, который также будет включать удаление файлов, которые были добавлены в более поздние коммиты (git checkout
по своему усмотрению не делает этого):
git reset e095 -- somefolder
Однако git reset
не обновляет рабочую копию, а параметр --hard
не работает с папками. Итак, используйте git checkout
, чтобы рабочая копия была такой же, как индекс:
git checkout -- somefolder
а затем, если вы также хотите удалить все добавленные файлы, вам также нужно сделать:
git clean -fd somefolder