Як повернути папку до певного коміту, створивши виправлення


97

Ось моя історія для папки 'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Я хочу повернути деяку папку назад до коміту "Виправлені помилки в якійсь папці".

Оскільки другий коміт включав зміни поза деякою папкою, я не хочу скасовувати цей коміт.

Я думаю, найбезпечнішим способом було б створити різницю / патч між комітами e095 та 89cd, який стосується лише певної папки, а потім застосувати цей патч. Як я можу це зробити?

Відповіді:


155

Ви можете використовувати git checkout, щоб оновити сховище до певного стану.

git checkout e095 -- somefolder

Що стосується вашого запитання про створення різниці, це теж спрацює. Просто згенеруйте різницю, щоб перейти з поточного стану назад до e095:

git diff 89cd..e095 -- somefolder

30
це не видаляє файли, додані до git reset e095 -- some/folderцього
коміту

2
З git 2.22 ви можете використовувати --no-overlayдля git checkoutтого, щоб відстежувані файли, які не є у коміті, з якого ви реєструєтесь, будуть видалені.
Маріуш Павельський

53

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

git reset e095 -- somefolder

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

git checkout -- somefolder

а потім, якщо ви також хочете видалити всі додані файли, вам також потрібно виконати:

git clean -fd somefolder

ця відповідь працює для мене, коли каталог містить нові файли.
Yahoho

2
Ця відповідь набагато краща, якщо ви справді хочете отримати чистий знімок сховища на той момент.
дані принцеси

Насправді набагато краще!
Олексій Патрот,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.