SW/Git

Git : 깃 마지막 커밋 취소 방법, 예제, 명령어

얇은생각 2022. 12. 27. 07:30
반응형

때때로 Git으로 작업할 때 최신 커밋을 실행 취소해야 할 수도 있습니다. 커밋은 지정된 시간에 Git 저장소의 스냅샷입니다. Git에는 현재 작업 분기의 최신 커밋을 가리키는 HEAD라는 참조 변수가 있습니다. 커밋을 실행 취소하려면 HEAD 변수를 이전 스냅샷을 가리키기만 하면 됩니다.

이 가이드에서는 마지막 Git 커밋을 실행 취소하는 방법을 설명합니다.

커밋이 이미 공유 리포지토리로 푸시된 경우 실행 취소하지 않는 것이 좋습니다. 커밋 메시지만 변경하려면 이 문서를 확인하십시오.

 

 

Git : 깃 마지막 커밋 취소 방법, 예제, 명령어

 

 

Git Three-Tree 아키텍처

Git에서 git reset 명령과 커밋 식별자를 차례로 사용하여 변경 사항을 실행 취소할 수 있습니다.

git reset은 명령 동작을 제어할 수 있는 추가 인수를 사용합니다. 재설정 작동 방식을 더 잘 이해하기 위해 Git의 세 가지 다른 트리에 대해 설명하겠습니다. 3-트리 아키텍처는 Git 관리 시스템의 핵심 개념입니다. 그것들은 파일들의 모음을 나타내기 때문에 트리라고 불립니다.

Git은 다음 세 개의 트리를 관리하고 조작합니다.

 

작업 디렉토리 - 리포지토리와 연결된 로컬 파일 시스템의 모든 하위 디렉토리 및 파일을 포함하는 디렉토리입니다. 이것은 종종 "작업 트리"라고 불립니다. 작업 디렉토리는 변경 사항을 준비 인덱스로 커밋하기 전에 테스트할 수 있는 샌드박스 같은 것입니다.

색인 - 이 트리는 git add를 사용하여 색인에 추가된 새 파일 또는 변경된 파일을 추적하여 다음 커밋에 포함합니다. 흔히 "준비 영역" 또는 "준비 인덱스"라고 합니다.

HEAD - 현재 분기의 마지막 커밋에 대한 포인터입니다.

 

 

git reset 명령에는 세 개의 트리에 해당하는 세 개의 인수가 있습니다.

--soft - 지정된 커밋으로 HEAD 포인터를 업데이트합니다. 작업 디렉토리 및 색인은 변경되지 않습니다.

--mixed - HEAD 포인터를 업데이트하고 인덱스를 지정된 커밋으로 재설정합니다. 작업 디렉토리는 변경되지 않은 상태로 유지됩니다. 이것은 reset 명령의 기본 작동 모드입니다.

--hard - HEAD 포인터를 업데이트하고 색인 및 작업 디렉터리를 지정된 커밋으로 재설정합니다. 커밋하지 않은 모든 로컬 변경 사항이 덮어쓰기되어 손실되므로 이 옵션을 사용할 때 각별히 주의하십시오.

 

 

 

마지막 커밋을 취소

로컬 파일 및 인덱스에 대한 변경 내용을 잃지 않고 마지막 커밋을 실행 취소하려면 --soft 옵션과 HEAD~1을 차례로 사용하여 git reset을 호출합니다.

git reset --soft HEAD~1

 

 

HEAD~1은 이전 커밋을 가리키는 변수입니다. 위의 명령은 커밋 한 번만큼 현재 분기를 뒤로 이동하여 마지막 커밋을 효과적으로 실행 취소합니다. git status 명령을 실행하면 변경된 파일이 커밋되지 않은 변경사항으로 나열됩니다.

HEAD 포인터를 업데이트하여 인덱스를 재설정하려면 --mixed 또는 옵션 없이 git reset을 실행합니다.

git reset --mixed HEAD~1
git reset HEAD~1

 

 

변경된 파일은 유지되지만 이전 예시와 달리 변경 내용이 커밋에 대해 스테이징되지 않습니다.

파일의 변경 내용을 유지하지 않으려면 --hard 옵션을 사용하여 git reset 명령을 실행합니다.

git reset --hard HEAD~1

 

 

하드 재설정을 수행하기 전에 변경 사항이 더 이상 필요하지 않은지 확인하십시오.

 

 

 

여러 커밋을 실행 취소

깃 리셋을 사용하면 이전 커밋으로 돌아갈 수 있습니다.

예를 들어, 현재 분기를 커밋 세 개 뒤로 이동하려면 다음을 사용합니다.

git reset --hard HEAD~3

 

 

--hard를 사용하고 있으므로 위의 명령을 실행하면 커밋 기록에서 최신 스냅샷 3개가 제거됩니다.

특정 커밋으로 다시 이동하는 또 다른 방법은 커밋 ID를 git reset 명령에 전달하는 것입니다.

git log를 사용하여 커밋 ID를 찾습니다.

명령어는 ID와 커밋 메시지의 첫 번째 줄을 포함하여 모든 커밋 목록을 표시합니다.

git log --oneline

# 32921222 (HEAD -> master) Update changelog
# 7505724c adding new tests
# 750862ce new blog post
# 95a63417 sort configuration file
# 252032e4 Refactor User class
# ...

 

 

재설정할 커밋의 ID를 알고 나면 해당 ID를 git reset 명령에 전달하기만 하면 됩니다.

git reset --hard 95a63417

 

 

마지막 커밋을 실행 취소하려면 git reset 명령을 사용합니다. 푸시된 커밋은 동료에게 많은 문제를 일으킬 수 있으므로 재설정하지 마십시오.

반응형