로컬 리포지토리에서 마지막 Git 커밋 실행 취소
이 기사에서는 Git에서 최신 커밋을 취소하는 방법에 대해 설명합니다. 이것은 커밋에 의해 도입된 변경 사항을 원격 저장소로 푸시하기 전에 제거하려는 경우에 유용합니다.
바로 들어가 보겠습니다.
Git에서 파일을 수정하지 않고 마지막 커밋 실행 취소
파일에 대한 이전 수정 사항이 수행되는 동안 커밋을 취소하는 방법에 대해 논의하여 작업을 시작할 것입니다. 이를 위해 git reset
명령을 -soft
인수와 함께 사용하여 Git이 파일 내용을 보존하도록 지시합니다.
$ git reset --soft HEAD~1
위의 명령은 HEAD
의 마지막 커밋을 제거합니다.
예를 들어 보겠습니다. 다음은 로컬 저장소의 커밋 기록입니다.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
git reset
명령을 실행하고 로컬 리포지토리에 미치는 영향을 확인하겠습니다.
위의 출력은 file.txt
가 인덱스에 있지만 커밋이 존재하지 않음을 보여줍니다. 파일을 수정하고 다시 커밋할 수 있습니다.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) (HEAD)
* 3b641e0 Second commit (HEAD~1)
* 21ca1e7 Initial commit (HEAD~2)
$ git reset --soft HEAD~1
명령은 마지막 커밋을 제거합니다. 마지막 두 커밋을 제거했다면 대신 $ git reset --soft HEAD~2
등을 사용했을 것입니다.
때로는 커밋과 파일을 제거하고 싶을 수도 있습니다. 아래와 같이 -hard
옵션과 함께 git reset
명령을 사용합니다.
$ git reset --hard HEAD~1
위의 명령은 인덱스 및 작업 디렉토리에서 커밋과 관련된 모든 수정 사항을 제거합니다.
예를 들어 보겠습니다. 다음은 커밋 히스토리를 보여줍니다.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
이 시나리오에서는 마지막 커밋을 제거하고 수정 사항을 없애고 싶습니다.
우리는 다음을 실행합니다:
$ git reset --hard HEAD~1
HEAD is now at 3b641e0 Second commit
저장소의 상태를 확인하기 위해 git status
명령을 실행해 보겠습니다.
위의 출력은 Git이 인덱스와 작업 디렉토리에서 파일을 제거했음을 보여줍니다.
마지막 커밋을 실행 취소하고 작업 디렉터리가 아닌 인덱스에 변경 사항을 유지해야 할 수도 있습니다. 이를 위해 아래와 같이 git reset
명령에 --mixed
옵션을 추가합니다.
$ git reset --mixed HEAD~1
예를 들어 보겠습니다. 이것은 커밋 기록의 현재 상태입니다.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
우리는 다음을 실행합니다:
$ git reset --mixed HEAD~1
파일은 작업 디렉토리에서 볼 수 있어야 하지만 색인에는 없어야 합니다. git status
명령어로 이를 확인해보자.
file.txt
가 추적되지 않은 파일 아래에 있음을 알 수 있습니다. 이것은 수정 사항을 유지하면서 커밋을 실행 취소하는 또 다른 방법입니다.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn