Git의 리포지토리에서 이전 커밋으로 되돌리기
이 튜토리얼에서는 Git 저장소의 이전 커밋으로 되돌리는 방법을 배웁니다.
버전 제어 시스템인 Git은 협업 개발 환경에서 파일에 수행된 변경 사항을 추적하는 데 사용됩니다.
Git은 프로젝트 디렉터리에 있는 파일의 변경 사항에 대한 스냅샷을 캡처하고 커밋과 연결하는 데 사용됩니다.
Git에서 커밋을 사용하면 파일에 대한 변경 기록을 탐색하고 볼 수 있습니다.
Git을 사용하여 Git 리포지토리에 있는 프로젝트 디렉터리의 파일을 재설정하거나 커밋이 생성되었을 때 디렉터리에 있는 파일의 상태를 이전 커밋(즉)으로 되돌릴 수도 있습니다.
이제 이를 예를 들어 설명하겠습니다.
git reset
을 사용하여 Git 리포지토리의 이전 커밋으로 재설정
협업 개발 환경에서 Git 리포지토리의 프로젝트 디렉토리에 있는 파일에 수행된 변경 사항을 추적하기 위해 Git을 사용합니다.
작업을 저장하기 위해 커밋을 생성할 때 Git은 누가 언제 변경했는지와 함께 커밋된 특정 변경 사항을 기록할 수 있는 고유 ID(일명 “SHA” 또는 “hash”)를 생성합니다.
커밋은 파일(또는 파일 집합)에 대한 개별 변경입니다. 커밋에는 일반적으로 변경된 사항에 대한 간략한 설명인 커밋 메시지가 포함됩니다.
때로는 프로젝트 디렉토리의 저장소를 이전 커밋으로 되돌리거나 재설정해야 할 수도 있습니다.
저장소에 git log
명령으로 표시된 대로 다음 커밋이 있다고 가정합니다.
$ git log --oneline
e4cd6b4 (HEAD -> main, origin/main) my change
99541ed second change
41f1f2a first change
...
이제 저장소를 first change
주석과 함께 SHA 41f1f2a
가 제공한 이전 커밋으로 재설정하려고 한다고 가정해 보겠습니다.
이를 수행하는 한 가지 방법은 git checkout
명령을 사용하여 일시적으로 이전 커밋으로 전환하는 것입니다.
따라서 우리는 다음과 같이 할 것입니다.
$ git checkout 41f1f2a
또한 이전 커밋으로 새 분기를 만들 수 있으므로 해당 분기에서 새 변경 사항을 커밋할 수 있습니다.
따라서 우리는 다음과 같이 할 것입니다.
$ git checkout -b first-change-branch 41f1f2a
대신 이전 커밋 이후의 변경 사항을 취소하려면 git reset
명령을 사용합니다.
저장소를 이전 커밋으로 다시 재설정하는 git reset
명령의 구문은 git reset -hard <commit-sha-id>
입니다.
따라서 우리의 경우 다음을 수행합니다.
$ git reset --hard 41f1f2a
주의해서 사용하십시오. 이것은 또한 모든 로컬 수정을 무시합니다. 커밋되지 않은 변경 사항은 손실됩니다.
또는 다음과 같이 재설정하기 전에 변경 사항을 숨길 수 있습니다.
$ git stash
$ git reset --hard 41f1f2a
$ git stash pop
위의 명령을 실행한 후 로컬 수정 사항은 숨김에 저장됩니다. 그런 다음 이전 커밋으로 재설정한 후 해당 수정 사항이 저장소에 다시 적용됩니다.
git revert
를 사용하여 Git 저장소의 이전 커밋으로 되돌리기
git revert
명령은 저장소의 히스토리를 유지하려는 경우에 사용됩니다.
git revert
명령을 실행하면 Git은 이전 커밋을 무효화하기 위해 역 패치로 커밋을 생성합니다. 이렇게 하면 기록을 다시 쓰지 않습니다.
저장소를 이전 커밋으로 되돌리기 위한 git revert
명령의 구문은 git reset <commit-sha-id1> <commit-sha-id2> ...
입니다.
따라서 저장소를 SHA 41f1f2a
에서 제공한 커밋으로 되돌리기 위해 처음 두 커밋을 되돌리고 싶습니다.
$ git revert e4cd6b4 99541ed
주어진 두 커밋으로 저장소를 되돌립니다.
다음과 같이 git revert
명령을 실행할 수도 있습니다.
$ git revert HEAD~2..HEAD
위의 git revert
명령은 마지막 두 커밋을 되돌립니다.
마지막으로 앞서 언급했듯이 git revert
명령은 이전 커밋을 취소하는 커밋을 생성합니다. 따라서 이제 이 커밋을 저장해야 합니다.
우리는 다음과 같이 할 필요가 있습니다.
$ git commit -m "reverted commits e4cd6b4 99541ed"
따라서 이제 커밋의 되돌리기가 저장소에 새 커밋으로 저장됩니다.
어떤 경우에는 병합 커밋이 있고 우리는 그것을 되돌리기를 원할 수도 있습니다.
-m parent-number
옵션과 함께 git revert
명령을 사용할 수 있습니다. 이 옵션은 메인라인의 상위 번호(1부터 시작)를 지정하고 지정된 상위 항목을 기준으로 변경 사항을 되돌리기 위해 되돌리기를 허용합니다.
병합 커밋에는 여러 부모가 있습니다. git revert
명령은 병합의 상위 항목을 메인 라인으로 간주할 것인지 결정하기 위해 추가 정보가 필요합니다.
명령 구문은 git revert -m 1 <commit-sha-id>
이고 1
은 첫 번째 부모에 대해 메인라인으로 사용됩니다.
따라서 커밋 SHA e4cd6b4
가 병합 커밋이라고 가정합니다. 그러면 다음과 같이 할 수 있습니다.
$ git revert -m 1 e4cd6b4
따라서 Git의 저장소에서 이전 커밋으로 되돌리는 방법에 대해 자세히 설명했습니다.
자세한 내용은 아래를 방문하십시오.
관련 문장 - Git Reset
- Git RM --Cached와 Git 재설정 파일의 차이점
- Git 재설정, 되돌리기 및 체크아웃 명령의 차이점
- 개발 분기를 마스터 분기와 동일하게 만들기
- 로컬 Git 변경 사항을 제거하는 데 사용되는 다양한 방법
- 충돌이 있는 Git 병합 되돌리기
- --hard 플래그로 Git 재설정 실행 취소