Git에서 커밋 취소
이 기사는 Git 커밋을 사용하는 동안 의도하지 않은 것을 복구하는 방법을 안내하려고 합니다. Git은 우리가 특정 문제를 해결하기 위해 큰 프로세스가 필요할 정도로 복잡하지 않지만, 발생하는 문제가 너무 커서 문제가 있는 것과 원하는 결과에 따라 다른 기술이 필요합니다.
Git에는 이해하기 쉬운 많은 측면이 있지만 이전 위치로 돌아가는 것이 훨씬 쉽고 눈에 띕니다. 저장소의 주요 변경 사항을 취소하는 것이 더 쉽습니다. 명령을 사용하여 수행되는 방법을 모를 때 약간 무서운 순간입니다. 그러나 실제로 커밋 또는 커밋 취소와 같은 작은 작업을 수행하는 것은 놀라울 정도로 쉽습니다.
그러나 이 경우 원치 않는 커밋
을 취소한 다음 새 변경 사항을 커밋
하기 위해 무엇을 하시겠습니까?
일부 변경을 수행한 다음 변경을 커밋한 경우 이를 위해 네 가지 방법이 있다고 가정해 보겠습니다.
Git에서 커밋 취소 - 하드 리셋
이 경우 40은 HEAD
이고 (42)는 파일 상태입니다.
(42)
38-39-40
↑
Head
그리고 커밋 실행 취소
40을 원하고 다시는 보고 싶지 않고 로컬로 수정된 파일의 모든 변경 사항을 지우고 싶습니다.
다음 명령을 사용합니다.
git reset --hard HEAD ~ 1
출력:
(42)
38-39
↑
Head
이제 39는 HEAD
입니다. 위의 예에서 --hard
를 사용했기 때문에 이제 파일은 39번째 커밋인 커밋 헤드의 상태로 재설정됩니다.
Git에서 커밋 취소 - Git 재설정
마지막 커밋 40이 큰 문제가 아니라 약간의 차이가 있다고 가정해 보겠습니다. 이제 커밋을 실행 취소
하지만 변경 사항은 유지합니다. 40을 HEAD
로 사용하여 여기에서 다시 시작합니다.
(42)
38-39-40
↑
Head
--hard
매개변수를 사용하는 대신 다음 명령을 사용합니다.
git reset HEAD ~ 1
출력:
(42)
38-39-40
↑
Head
두 경우 모두에서 보았듯이 HEAD
는 최신 커밋을 정의합니다. git reset HEAD~1
을 수행할 때 Git 명령은 HEAD
포인터를 하나의 커밋으로 다시 이동합니다. 그러나 (--hard
를 사용하지 않는 한) 우리는 파일을 이전 상태로 둡니다. 우리는 그 안에서 아무것도 잃지 않았습니다.
Git에서 커밋 취소 - Git 소프트 리셋
간단히 말해서 커밋을 실행 취소
할 수도 있지만 다음을 사용하여 파일과 인덱스를 그대로 둘 수 있습니다.
git reset --soft HEAD ~ 1
이것은 우리의 파일을 거기에 남겨두는 것이 아닙니다. 그것은 심지어 거기에 우리의 인덱스를 남겨둡니다. git status
를 수행하면 이전과 동일한 파일이 인덱스에 있는 것을 볼 수 있습니다. 사실, 우리는 이 명령 후에 git commit
을 수행할 수 있고 방금 했던 이전 커밋을 다시 수행하는 것을 볼 수 있습니다.
Git에서 커밋 취소 - 하드 리셋 파일 복구
첫 번째 옵션 예제에서와 같이 커밋을 취소했지만 나중에 필요하다는 것을 깨달았다고 가정해 보겠습니다. 이제 어떻게 해야 할까요?
걱정하지 마세요. 되돌릴 수 있는 방법이 아직 있습니다. git reflog
명령을 사용하여 이동한 (완료되지 않은) 커밋 목록을 확인합니다. 파괴한 커밋을 찾고 다음을 수행합니다.
git checkout -b BranchName CommitYouDestroyed
이제 해당 커밋을 복원했습니다. Git에서 커밋은 삭제된 날로부터 90일 동안 삭제되지 않으므로 쉽게 저장소에 백업으로 다시 복원할 수 있습니다.
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn