Git 설명서 - (5) 되돌리기
07 Aug 2017 | git되돌리기
실수를 했을 경우 했던 작업을 복원 및 되돌리기를 해야합니다. 다만, 한 번 되돌린 경우 복구를 할 수 없기 때문에 주의해야 합니다.
commit 되돌리기
종종 commit한 결과를 수정해야 할 경우가 있습니다. 어떤 파일을 누락하거나 commit 메세지를 수정할 경우도 이에 해당합니다. --amend
옵션을 이용하면 다시 commit을 수행할 수 있습니다.
$ git commit --amend
만약 파일 추가를 빼먹었다면 다음과 같은 순서로 명령을 실행할 수 있습니다.
$ git commit -m 'minor bug fixed' $ git add snowdeer_added.cpp $ git commit --amend
두 번째 commit은 첫 번째 commit를 덮어쓰기 때문에 여기서 실행한 명령어 3개는 모두 하나의 commit으로 기록됩니다.
Staged 파일을 Unstaged 상태로 되돌리기
실수로 git add *
명령어를 실행하면 의도치 않은 파일들까지 Staged 상태로 되는 경우가 발생할 수 있습니다.
git status
로 확인하면 다음과 같습니다.
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: snowdeer_1.cpp modified: snowdeer_2.cpp
여기서 설명에 나온 git reset HEAD <file>
명령어를 이용해서 Staged 상태의 파일을 Unstaged 상태로 만들어줄 수 있습니다.
$ git reset HEAD snowdeer_2.cpp
수정한 파일을 원래 상태로 되돌리기
파일 수정을 했지만 서버에 있는 내용으로 복원하고 싶은 경우입니다. 자주 발생하는 경우이기도 합니다.
마찬가지로 git status
를 실행해보면 복구하는 명령어를 조회할 수 있습니다.
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: snowdeer_1.cpp
위 설명에 있는 git checkout -- <file>
명령어를 이용해서 아래와 같이 실행해주면 됩니다.
$ git checkout -- snowdeer_1.cpp
이제 파일이 복원된 것을 확인하면 됩니다.
하지만 위와 같은 방법으로 복원한 것은 기존에 작업하던 내용을 전부 날려버리기 때문에 상당히 위험한 명령어입니다. 따라서 각별히 주의해서 사용해야 할 것입니다.
좀 더 안전하게 복원하고 싶으면 stash
명령어나 branch
를 활용하는 것이 더 좋습니다.