Как вернуть папку в определенный коммит, создав патч - PullRequest
86 голосов
/ 25 мая 2011

Вот моя история для папки '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, который применяется только к некоторой папке, и затем применить этот патч. Как я могу это сделать?

Ответы [ 2 ]

137 голосов
/ 25 мая 2011

Вы можете использовать git checkout , чтобы обновить ваш репозиторий до определенного состояния.

git checkout e095 -- somefolder

Что касается вашего вопроса о генерации diff, это тоже сработает.Просто сгенерируйте diff, чтобы перейти от вашего текущего состояния обратно к e095:

git diff 89cd..e095 -- somefolder
36 голосов
/ 14 февраля 2017

Вы можете использовать git reset для сброса индекса, который также будет включать удаление файлов, которые были добавлены в более поздних коммитах (git checkout сам по себе этого не делает):

git reset e095 -- somefolder

Однако git reset не обновляет рабочую копию, а опция --hard не работает с папками. Затем используйте git checkout, чтобы сделать рабочую копию такой же, как индекс:

git checkout -- somefolder

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

git clean -fd somefolder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...