사람은 누구나 실수를 한다.
Git 을 사용하다보면 실수를 하게 됩니다. 그럴 때는 어떻게 해야할까요? 이번 포스팅에서는 Git 을 사용하다가 실수를 했을 때 대응방법에 대해 알아보겠습니다.
사전 설정
시작하기 앞서, github에 별도 저장소를 만들어서 실습을 진행하겠습니다. 이름은 test-git
로 하고 다음과 같은 작업을 진행합니다.
echo "hello world" > hello.txt
git add .
git commit -m "add hello.txt"
git push origin main
git log
명령어로 살펴보면 아래와 비슷한 결과가 나올 것 입니다.
해당 로그는 어디까지나 필자의 PC 기준이므로 실제 로그와는 다를 수 있습니다.
git log
commit 234874713a5798c4e42c63996f9db099efa8379c (HEAD -> main, origin/main)
Author: ddochea0314
Date: Sat Apr 1 11:53:30 2023 +0900
add hello.txt
잘못된 작업 후 commit 까지 수행
실수로 hello.txt
파일을 잘못 수정한 채, 깃 commit을 하게 되었다고 가정하겠습니다.
hello.txt
파일을 아무렇게나 수정하고 아래 명령어와 같이 커밋을 진행합니다.
git add .
git commit -m "실수로 수정한 hello.txt"
git log 명령어를 보면 아래와 비슷한 결과가 나올 것 입니다.
해당 로그는 어디까지나 필자의 PC 기준이므로 실제 로그와는 다를 수 있습니다.
commit 4390672d0998c87dde3507a149d9bbad7867e1c4 (HEAD -> main)
Author: ddochea0314
Date: Sat Apr 1 12:05:37 2023 +0900
실수로 수정한 hello.txt
commit 234874713a5798c4e42c63996f9db099efa8379c (origin/main)
Author: ddochea0314
Date: Sat Apr 1 11:53:30 2023 +0900
add hello.txt
vscode 에서 GitLens 라는 플러그인을 사용하고 있다면, 아래와 같이 커밋 그래프를 볼 수 있습니다.
commit 까지만 한 경우라면 git reset
명령어를 통해 되돌릴 수 있습니다. 현재 돌아가고 싶은 커밋의 ID가 234874713a5798c4e42c63996f9db099efa8379c
커밋이므로 아래와 같은 명령어를 입력합니다.
git reset --soft 234874713a5798c4e42c63996f9db099efa8379c
git reset 명령어에서 —soft 옵션은 커밋을 되돌리지만, 파일의 수정 내용은 그대로 유지합니다. 따라서 파일 내용은 그대로인 채, 커밋이 되돌아간 것을 확인할 수 있습니다. git status
명령어를 통해 확인해보면 아래와 같은 결과가 나올 것 입니다.
git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: hello.txt
만약 파일의 수정 내용까지 제거하고 싶다면, --hard
옵션을 사용하면 됩니다.
주의 :
--hard
옵션을 사용하면, 커밋 이후의 모든 작업 내용이 사라집니다. 따라서, 커밋 이후의 작업 내용을 백업해 두었거나, 커밋 이후의 작업 내용이 중요하지 않은 경우에만 사용해야 합니다. 현 사례는 단순 파일 1개의 수정이지만 실제로는 여러 파일의 수정이 있을 수 있습니다. 이런 경우에는--hard
옵션을 사용하면, 모든 파일의 수정 내용이 사라지므로 주의해야 합니다.
git reset --hard 234874713a5798c4e42c63996f9db099efa8379c
git add .
git commit -m "올바른 수정 hello.txt"
git push origin main
마치며
git push 작업 이전에 실수를 했을 때는 git reset
명령어를 통해 쉽게 되돌릴 수 있습니다.
—soft 옵션을 통해 자신의 작업사항을 희생(?)하지 않고 되돌릴 수 있으며, push 이전이기 때문에 협업자에게 영향을 주지 않았기 때문에 비교적 손쉽게 되돌릴 수 있습니다.
그러나 push 이후에 실수를 했을 때는 어떨까요? 다음 포스팅에서 알아보겠습니다.