패치를 생성하여 폴더를 특정 커밋으로 되 돌리는 방법


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 사이에 diff / patch를 만든 다음 해당 패치를 적용하는 것입니다. 어떻게 할 수 있습니까?

답변:


156

git checkout 을 사용하여 저장소를 특정 상태로 업데이트 할 수 있습니다 .

git checkout e095 -- somefolder

diff 생성에 대한 귀하의 질문에 관해서도 마찬가지입니다. 현재 상태에서 다음으로 돌아가려면 diff를 생성하십시오 e095.

git diff 89cd..e095 -- somefolder

30
이것은 해당 커밋에 추가 된 파일을 제거하지 않고 git reset e095 -- some/folder대신 사용 합니다
shime

3
git 2.22 에서 체크 아웃중인 커밋되지 않은 추적 된 파일이 제거되도록 --no-overlayfor 를 사용할 수 있습니다 git checkout.
Mariusz Pawelski

54

를 사용 git reset하여 최근 커밋에 추가 된 파일을 제거하는 것도 포함하는 인덱스를 재설정 할 수 있습니다 ( git checkout그 자체로는 수행하지 않음).

git reset e095 -- somefolder

그러나 git reset작업 복사본을 업데이트하지 않으며 --hard옵션이 폴더에서 작동하지 않습니다. 그런 다음을 사용 git checkout하여 작업 복사본을 인덱스와 동일하게 만듭니다.

git checkout -- somefolder

추가 된 파일도 제거하려면 다음을 수행해야합니다.

git clean -fd somefolder

이 대답은 디렉토리에 새 파일이 포함될 때 저에게 효과적입니다.
Yahoho

2
이 대답은 그 당시 저장소의 깨끗한 스냅 샷을 정말로 원한다면 훨씬 낫습니다.
데이터 공주

실제로 훨씬 더 좋습니다!
Alexis Pautrot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.