로컬 리포지토리에서 마지막 Git 커밋 실행 취소

John Wachira 2024년2월15일
로컬 리포지토리에서 마지막 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 명령을 실행하고 로컬 리포지토리에 미치는 영향을 확인하겠습니다.

Git 리셋

위의 출력은 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이 인덱스와 작업 디렉토리에서 파일을 제거했음을 보여줍니다.

마지막 커밋을 실행 취소하고 작업 디렉터리가 아닌 인덱스에 변경 사항을 유지해야 할 수도 있습니다. 이를 위해 아래와 같이 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 명령어로 이를 확인해보자.

Git 상태로 확인

file.txt가 추적되지 않은 파일 아래에 있음을 알 수 있습니다. 이것은 수정 사항을 유지하면서 커밋을 실행 취소하는 또 다른 방법입니다.

작가: John Wachira
John Wachira avatar John Wachira avatar

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

관련 문장 - Git Commit