
Git은 강력한 버전 관리 도구이지만, 명령어 하나로 작업한 내용이 사라질 수 있어 초보자에게는 다소 부담스러울 수 있습니다.
그중 git reset은 가장 강력하면서도 위험할 수 있는 명령어 중 하나입니다.
잘못 사용하면 많은 변화를 되돌릴 수 있지만, 실수로 git reset을 사용한 후 어떻게 작업을 복구할 수 있는지 알면 대부분의 상황을 안전하게 처리할 수 있습니다.
이 글에서는 git reset 명령어를 실행한 후 변경사항을 복구하는 방법에 대해 설명하겠습니다.
1. git reset이란 무엇인가?
먼저, git reset 명령어가 무엇인지 이해하는 것이 중요합니다.
이 명령어는 로컬 리포지토리에서 커밋 이력을 수정하거나 삭제할 수 있는 도구입니다. git reset은 크게 세 가지 옵션을 사용할 수 있습니다.
- --soft: 최근 커밋만 되돌리고, 변경 사항은 스테이징 상태로 유지합니다.
- --mixed: 커밋과 스테이징된 변경 사항을 되돌리고, 파일의 변경 내용은 그대로 유지합니다.
- --hard: 커밋, 스테이징된 변경 사항, 그리고 파일의 변경 내용까지 모두 되돌립니다. 위험한 명령어로, 복구가 어려울 수 있습니다.
2. git reset 후 복구하는 방법
2.1 git reflog 사용하기
git reset --hard를 사용했을 때, 가장 좋은 복구 방법은 git reflog를 사용하는 것입니다.
git reflog는 Git이 이전 커밋들의 기록을 추적한 로그입니다.
이 명령어를 사용하면 커밋을 실수로 삭제하거나 변경해도 쉽게 복구할 수 있습니다.
git reflog
git reflog 명령어를 입력하면, 다음과 같은 출력이 나옵니다.
a1b2c3d (HEAD -> main) HEAD@{0}: reset: moving to HEAD^
d4e5f6g HEAD@{1}: commit: Add new feature
h7i8j9k HEAD@{2}: commit: Fix bug in login module
여기서 HEAD@{1} 또는 HEAD@{2}와 같이 원하는 커밋을 선택해 복구할 수 있습니다.
2.2 특정 커밋으로 돌아가기
이제 실수로 되돌린 커밋으로 돌아가 봅시다. 만약 HEAD@{1} 커밋으로 돌아가려면, 다음 명령어를 사용합니다.
git reset --hard HEAD@{1}
이 명령어는 해당 커밋 시점으로 작업 디렉토리를 복구합니다.
2.3 git reset --soft 또는 git reset --mixed 후 복구
git reset --soft 또는 git reset --mixed를 사용한 경우, 파일의 변경 내용은 그대로 남아있으므로 복구가 간단합니다. git reset --soft로 인한 변경사항은 스테이징 영역에 그대로 남아있으므로, 추가적인 작업 없이 다시 커밋하면 됩니다.
git commit -m "복구된 커밋"
git reset --mixed로 인해 스테이징 영역이 초기화되었지만, 파일 변경 사항은 그대로이므로 git add 명령어를 사용하여 파일을 다시 스테이징하고 커밋할 수 있습니다.
git add .
git commit -m "복구된 커밋"
3. git revert를 고려하세요
커밋 이력을 변경하는 대신, 새로운 커밋을 통해 변경사항을 되돌리려면 git revert 명령어를 사용하는 것이 좋습니다.
이 명령어는 기존 커밋을 취소하는 새로운 커밋을 생성하여 이력을 유지하면서도 안전하게 되돌릴 수 있습니다.
git revert <커밋 ID>
이 명령어를 사용하면 기존 커밋을 삭제하지 않고도 작업을 되돌릴 수 있습니다.
Git의 강력한 기능인 git reset은 신중하게 사용해야 하지만, 실수로 잘못 사용했더라도 복구 방법이 있습니다.
git reflog를 사용해 이전 커밋으로 돌아가거나, git revert로 안전하게 커밋을 되돌릴 수 있습니다.
이러한 방법들을 이해하고 사용하면 Git을 더욱 효율적이고 안전하게 사용할 수 있습니다.
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
Tester Share [테스터쉐어] - Google Play 앱
Tester Share로 Google Play 앱 등록을 단순화하세요.
play.google.com
'Program Development Tips > Git' 카테고리의 다른 글
[Git] Sourcetree: Git과 Mercurial을 위한 강력한 GUI 클라이언트 (2) | 2024.09.03 |
---|---|
[Git] 커밋 히스토리를 보는 다양한 방법: Git에서 이력을 효율적으로 탐색하는 방법 (0) | 2024.09.03 |
[Git] Gitmoji: 커밋 메시지를 더욱 직관적으로 만드는 이모지의 힘 (2) | 2024.08.30 |
[Git] 여러 커밋을 취소하는 방법: 효율적인 코드 관리 (0) | 2024.08.27 |
[Git] 협업에서 Remote Repository에 올라간 커밋 취소하기: git revert vs git reset (0) | 2024.08.27 |