git 되돌리기 (git commit 취소, git add 취소)
작업한 내용을 되돌리는 방법에 대해서 알아보도록 하겠습니다.
Git은 대부분 복구할 수 있지만 되돌린 것은 복구할 수 없으니 주의해야 합니다.
commit 수정 하기
git commit --amend
명령어로 커밋을 수정할 수 있습니다.
$ git commit --amend
이 명령어는 커밋 메시지를 잘못 적었거나 어떤 파일을 빼먹었을 때 등 커밋을 수정할 때 주로 사용합니다.
커밋을 했는데 빠트린 파일이 있다면 아래와 같이 수정할 수 있습니다.
$ git commit -m 'commit'
$ git add file
$ git commit --amend
여기서 실행한 명령어 3개는 모두 커밋 한 개로 기록되며 두 번 째 커밋은 첫 번째 커밋을 덮어쓰게 됩니다.
git add 취소하기
git add 를 하면 파일을 Staging Area(=index)에 넣습니다.
git reset HEAD <file>
명령어로 Staging Area에 있는 파일들을 꺼낼 수 있습니다. (git add 취소)
$ git add file1
$ git add file2
$ git status
현재 브랜치 master
커밋할 변경 사항:
(use "git restore --staged <file>..." to unstage)
새 파일: file1
새 파일: file2
위에 file1, file2 파일이 git add 명령으로 Staging Area에 추가된 것을 확인할 수 있습니다.
여기서 file1만 꺼내보도록 하겠습니다.
$ git reset HEAD file1
$ git status
현재 브랜치 master
커밋할 변경 사항:
(use "git restore --staged <file>..." to unstage)
새 파일: file2
추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
file1
git reset HEAD file1
명령으로 file1이 unstaged 상태로 변경된 것을 확인할 수 있습니다.
git commit 취소하기
git reset HEAD^
명령어를 사용하여 최근 commit을 취소할 수 있습니다.
$ git reset HEAD^
위 명령은 git reset --mixed HEAD^
와 동일합니다.
git reset 명령은 아래 옵션과 함께 사용됩니다.
- --soft : HEAD 위치만 변경, index(Staged Area)와 워킹 디렉터리는 보존합니다.
- --mixed : index(Staged Area) 이전으로 되돌리고, 워킹 디렉터리는 보존합니다. (default)
- --hard : index(Staged Area) ,워킹 디렉터리를 이전으로 되돌립니다.
워킹 디렉토리 포함 모든 것을 commit 이전으로 되돌리고 싶다면 아래 명령어를 사용하면 됩니다.
$ git reset --hard HEAD^
--hard
옵션은 강제로 워킹 디렉터리를 덮어쓰기 때문에 되돌리는 것이 불가능하니 주의해야 합니다.
수정된 파일 되돌리기
git checkout -- [file]
명령을 사용하여 수정된 파일을 되돌릴 수 있습니다.
$ git checkout -- file1
위에는 수정된 file1 파일을 수정 전으로 되돌리는 예입니다.