마지막 git 커밋으로 롤백


120

나는 방금

git commit -m "blah"

그런 다음 일부 파일을 추가했습니다. 아직 추가 / 커밋되지 않은 현재 파일의 내용을 롤백하고 제거하려면 어떻게합니까?


15
아니요, 이것은 OP가 요구하는 것이 아닙니다. 마지막 커밋을 실행 취소하는 것이 아니라 마지막 커밋으로 롤백하기를 원한다는 것이 분명합니다. 그는 일부 파일을 추가 한 다음 커밋했다고 말하지 않았습니다. 그래서 그는 마지막 커밋을 원합니다.
Paul

1
이 매우 일반적인 질문에 대한 답을 찾기가 너무 어렵습니다
Sam

답변:


211

emptor 경고 - 앞서 파괴 명령.

완화 - git reflog 필요한 경우 절약 할 수 있습니다.


1) 로컬 파일 변경 실행 취소 및 마지막 커밋 유지

git reset --hard

2) 로컬 파일 변경 실행 취소 및 마지막 커밋 제거

git reset --hard HEAD^

3) 로컬 파일 변경 사항을 유지 하고 마지막 커밋을 제거 합니다.

git reset --soft HEAD^

20
이 명령은 이전 커밋을 삭제하므로주의해서 사용하십시오! git reset --hard 더 안전합니다
rudivonstaden 2013

9
WTF는 36 표가있는 정답입니다. 나는 이것에 대한 일을 며칠 잃었습니다. 왜냐하면 나는 코멘트가 아니라 대답을 읽었 기 때문입니다. 이것은 질문에 대한 정답이 아닙니다!
Chris Nevill

1
OK 모두 손실되지 않습니다! git reflog를 수행하면 재설정 전에 수행 한 커밋을 볼 수 있습니다. 그런 다음 해당 커밋을 체크 아웃 할 수 있습니다.
Chris Nevill

3
그만한 가치가 있기 때문에 나는 OP의 질문을 "어떻게 커밋을 롤백하고 현재 파일을 제거합니까"로 해석했지만 모호했습니다. 영업 이익은 단순히 "어떻게 추가되거나 커밋되지 않은 현재 파일을 제거 할 수 있습니까"라고했다면 나는 다르게 이해했을 것이다
조 Hanink

2
Git은 Alan Kays 진술의 반대입니다. 단순한 것은 단순해야하고 복잡한 것은 가능해야합니다. ... 특히 첫 번째 부분. 그래도 답변 해 주셔서 감사합니다. 도움이되었습니다.
0xC0000022L

46

새로 추가 된 내용과 이미 준비된 (색인에 추가 된) 파일을 제거하려면 다음을 사용합니다.

git reset --hard

최신 커밋 ( "blah"메시지가있는 커밋)도 제거하려면 다음을 사용하는 것이 좋습니다.

git reset --hard HEAD^

추적되지 않은 파일 (아직 색인에 추가되지 않은 새 파일) 및 폴더를 제거하려면 다음을 사용하십시오.

git clean --force -d

git reset --hard HEAD ^는 내 최근 커밋을 영구적으로 제거합니까? 돌아갈 수없는 것처럼?
user137717

그것은 "자식 깨끗한 --force는 -d"또한 .gitignored 제거합니다 폴더 보인다
알렉세이 Timokhin

15

git reset --hard 작업 디렉토리를 마지막 커밋으로 되돌리고 새 / 변경된 파일을 삭제합니다.


2
하지만 파일은 여전히 ​​있습니다. (추적되지 않은 파일이 아직 있습니다)
Blankman

이 경우 당신은 "git stash"를 할 수 있습니다
jacktrade

3
이것이 OP의 명확하고 모호하지 않은 질문에 대한 유일한 명확하고 모호하지 않은 대답이기 때문에 찬성했습니다.
Paul

4

git revert HEAD^다음에서 마지막 커밋으로 되돌리기 위해를 사용하여 커밋을 되돌릴 수 있습니다 . HEAD ^ 대신 ID를 사용하여 되돌릴 커밋을 지정할 수도 있습니다.


이것은 당신이 말하는 의미에서 "되돌리기"가 아닙니다. 이것은 리버스 커밋을 생성합니다.
Stefan Kendall

4

마지막 커밋을 해제하려면 다음을 사용하십시오.

git reset HEAD~

나를 위해 매력처럼 작동합니다.


2
이것이 질문에 대한 정확한 답입니다
Deniz Kocaboğa

이것은 승인 된 답변이어야합니다
amiabl

3

마지막 커밋 이후 로컬 파일 변경을 UNDO 하는 쉬운 방법 은 새 브랜치에 배치하는 것입니다.

git branch changes
git checkout changes
git add .
git commit

이렇게하면 새 분기에 변경 사항이 남습니다. 원래 브랜치로 돌아가서 마지막 커밋으로 돌아갑니다.

git checkout master

새 분기는 원래 분기를 엉망으로 만들 위험없이 변경 사항을 되 돌리는 다양한 방법을 연습 할 수있는 좋은 장소입니다.

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