LainyZine: 프로그래머 가이드 🐣

git add로 추가한 내용을 취소하는 방법

Git 저장소의 커밋 과정은 크기 워킹 트리, Index, HEAD로 나눠집니다. 1. 워킹 트리에서 파일 변경 작업을 하고, 2. 이 중에 커밋할 내용을 stage해서 Index에 추가하고(git add), 3. 이를 커밋하면 Index의 내용이 커밋으로 만들어지고(git commit) HEAD는 최신 커밋을 가르킵니다. 조금 복잡하게 느껴질 수도 있습니다만, Git을 사용해본 경험이 있다면 2번은 git add, 3번은 git commit으로 생각해도 무방합니다.

저장소 작업을 하다보면 2번 과정에서 git add로 Index에 추가한 내용을 취소하고 싶을 때가 있습니다. 이 글에서는 git add로 추가한 내용을 되돌리는 방법을 소개합니다.

저장소 초기화하고 한 번 도 커밋하지 않았을 때 git add한 내용 취소하기

저장소를 초기화하고 한 번도 커밋하지 않았을 때 git add한 내용을 취소할 때는 git rm 명령어를 사용합니다. Git 저장소를 초기화하고, README.md를 git add한 간단한 예제로 확인해보겠습니다.

$ git init
$ touch README.md
$ git add README.md
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   README.md

이 상태에서 REAMDE.md 파일을 Index에서 삭제하고 싶다면, 다음 명령어를 실행합니다(git status 출력 결과를 자세히 보면 unstage 방법이 있습니다.).

git rm --cached README.md

첫 커밋 이후 git add한 내용을 취소하는 경우

첫 커밋 이후 git add로 추가한 내용을 취소하는 방법은 몇 가지가 있습니다. 먼저 아래와 같이 License 파일을 Index에 추가한 상황을 생각해보겠습니다.

$ touch License
$ git add License
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   License

이 경우 reset 서브 커맨드로 git add한 내용을 취소할 수 있습니다.

git reset HEAD
git reset HEAD [FILE...]

git reset HEAD를 실행하면 Index에 반영된 모든 내용이 취소됩니다. 인자로 특정 파일 경로을 지정하면 해당 파일만 reset 됩니다.

Git 2.23.0부터는 git restore 명령어를 사용할 수 있습니다. git status 출력 결과에서도 restore 명령어로 Index에 추가된 파일을 취소하는 방법이 나와있습니다.

git restore --staged [FILE...]

git reset과 사용법은 비슷합니다만, restore를 사용할 경우 반드시 파일을 지정해주어야합니다.

Index에 추가된 내용을 취소하는 건 생각보다 자주 있는 작업입니다. 명령어가 기억나지 않으면, 앞에서 살펴보았듯이 git status 명령어를 실행해도 취소하는 방법이 나오니 참고해주세요.

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.