2020. 3. 21. 16:33ㆍGit Study
코드를 작성하다 보면, 이미 커밋된 내용을 Undo하고 싶을 때가 있다. Git에서는 대부분의 실수를 복구할 수 있지만 이미 되돌린 것은 복구할 수 없다.
되돌리기
너무 일찍 commit 했거나 어떤 파일을 빠트렸을 때, 그리고 commit message를 잘못 적을때는 commit을 수정해야 한다. 먼저 파일을 수정하고, Staging Area에 추가한 다음 --amend
옵션을 주어 커밋을 재작성 할 수 있다.
$ git commit --amend
이 명령은 Staging Area를 사용하여 commit한다. 수정한 것 없이 사용한다면 commit message를 수정할 수 있다. 메시지를 수정하지 않고 그대로 commit해도 기존의 것을 re-write한다.
commit을 했는데, Stage하는 것을 빠트렸다면 다음과 같이 수정할 수 있다.
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
위와 같이 작성하면, 명령어 3개가 모두 1 commit으로 기록된다. 첫번째 것이 덮어씌워진다. 첫번째 것은 history에 남지않고 완전히 변경되는 것을 의미한다.
파일상태를 Unstage로 변경하기
여기에선 staging area
와 working directory
를 넘나드는 방법을 설명한다. 책에 있는 이상한 설명은 집어치우고, 파일 두개를 수정하고서 각각 commit 하려했지만, 실수로 git add *
를 실행해버리면, 두 파일 모두 staging area에 들어가게 된다. 우선 확인부터 해보면,
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
해당 명령어를 실행하면 Changes to be commited
밑에 git reset HEAD <file> ...
이란 명령어를 제시해준다. 이것으로 Unstaged 상태로 변경할 수 있다. CONTRIBUTING.md
를 Unstaged로 변경하려면 다음과 같이 작성하면 된다.
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
잘 동작하게 되고, CONTRIBUTING.md
파일은 Unstaged 상태가 된다. 실제로 git reset
이 어떻게 정확하게 작동하는지는 다른 파트에서 참고하면 될거 같다.
정리하는 내용
변경한 내용을 쉽게 버릴 순 없고, 그러나 당장 되돌려야만 한다면 Stash 혹은 Branch를 쓰는 것이 유익하다. Git에서 Commit한 내용은 언제나 뭐든지 복구 할 수 있다. 그러나 커밋하지 않고 잃어버린 것은 절대로 되돌릴 수 없다.
'Git Study' 카테고리의 다른 글
Git - Remote Repository (0) | 2020.03.21 |
---|---|
Git 특정 브랜치의 업데이트 된 내용을 내가 작업하는 브랜치로 가져오는 방법 (0) | 2020.03.07 |
<2020.03.02> Git을 사용하는 방법에 대한 생각 (0) | 2020.03.03 |
Git - 커밋 히스토리 조회하기 (0) | 2020.03.01 |
Git의 기초 - 수정하고 저장소에 저장 (0) | 2020.03.01 |