git을 사용하다 보면 git commit의 내용을 수정하거나 내용을 취소하고 싶을 때가 있다.
이와 관련된 명령어들을 정리해 보려고 한다.
이부분은 가끔 나도 헷갈릴 떄가 있어서 기록용으로 저장해놓는다.
그전에 git add를 취소하는 방법을 알고 싶은 사람은 아래 포스팅을 참조하면 된다.
git commit 수정하기
git commit을 너무 빨리 해서 add를 추가로 해야할 때, commit messege를 수정하고 싶을 때 사용하는 명령어이다.
우선 git을 add 하고 수정하는 상황에 대해서 만들어본다.
현재 git의 상황은 이렇다.
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
그리고 READMD.md만 add 한 후 commit 했다고 가정해보자.
$ git add README.md
$ git commit -m 'add README.md'
[master 41a0ef7] add README.md
1 file changed, 2 insertions(+), 1 deletion(-)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
이 때 test.txt를 추가로 add해야 한다고 가정했을 때, git add로 추가 파일을 staging 하고, git commit --amend 하면 된다.
그럼 아래와 같이 편집창이 뜨게 되는데,
'e'를 눌러서 편집인 상태로 만들고, 편집한 후에
'esc' + ':exit'를 눌러서 편집 완료한 채로 나가면 된다.
$ git add test.txt
$ git commit --amend
만일 수정을 하지 않고 그냥 나가고 싶으면 'esc' + ':q"를 입력하면 되고, 수정했는데 반영하지 않고 나가고 싶으면 'esc' + ':q!'를 입력하고 나가면 된다.
add README.md
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Fri Nov 20 16:37:51 2020 +0900
#
# On branch master
# Changes to be committed:
# modified: README.md
# modified: test.txt
#
그러면 최종적으로 몇개의 파일들이 수정되어서 staging 되었는지 결과물을 알려준다.
$ git commit --amend
[master 35c66d8] add README.md and test.txt
Date: Fri Nov 20 16:37:51 2020 +0900
2 files changed, 3 insertions(+), 3 deletions(-)
이 명령어는 두개의 commit을 만드는 게 아닌 하나의 commit을 수정하는 것이기 때문에 이전의 commit 내용은 사라지며, commit의 내용만 변경되는 것이다.
git commit 취소하기
나는 git commit --amend를 통해서 "add README.md"를 "add README.md and test.txt"로 변경했다.
현재의 commit log 상황을 보자
$ git log
commit 35c66d82e56100ad9e91ee8537d8eb283ebb3dce (HEAD -> master)
Author: eunjikeam <gg96083@gmail.com>
Date: Fri Nov 20 16:37:51 2020 +0900
add README.md and test.txt
commit 63d3f22539a85ba59fde6cbc7ddf7982519500b8 (origin/master)
Author: eunjikeam <gg96083@gmail.com>
Date: Wed Nov 18 10:23:07 2020 +0900
edit and add files
이 상태에서 git commit을 지우고 싶을 때에는 'git reset HEAD^' 작업을 하면 되는데, 이 작업은 옵션에 따라 세가지로 나뉜다.
- git reset --soft HEAD^ : commit을 취소하고 해당 파일은 staged 상태로 워킹 디렉토리에 보존
- git reset --mixed HEAD^ : (옵션이 없으면 default) commit을 취소하고 해당 파일은 unstaged 상태로 워킹 디렉토리에 보존
- git reset --hard HEAD^ : commit을 취소하고 해당 파일은 unstaged 상태로 워킹 디렉토리에서 삭제
git reset --hard HEAD는 수정한 내용들이 이전 상태로 완전히 돌아가는 작업이기 떄문에 매우 신중하게 작업해야 하는 부분이다. 위험한 명령어로 왠만하면 사용하지 않는 것이 좋다.
그렇다면 git reset HEAD^( = git reset --mixed HEAD^)를 실행시킨 후 git log를 다시 한번 확인해 보자
$ git reset HEAD^
Unstaged changes after reset:
M README.md
M test.txt
$ git log
commit 63d3f22539a85ba59fde6cbc7ddf7982519500b8 (HEAD -> master, origin/master)
Author: eunjikeam <gg96083@gmail.com>
Date: Wed Nov 18 10:23:07 2020 +0900
edit and add files
다음과 같이 unstaged되는 이력이 나오며, log를 봤을 떄 commit 한 이력이 사라진 걸 볼 수 있다.
참조 사이트
'Code > Git' 카테고리의 다른 글
[Git] .gitignore 설정하기 (0) | 2020.11.26 |
---|---|
[git] git push reject error 해결 (0) | 2020.11.24 |
[Git]Git add 명령어 되돌리기 (0) | 2020.11.20 |
[Git] git bash 한글이름 파일 깨짐 해결 (0) | 2020.11.19 |
[Git] git commit 히스토리 조회하기 (0) | 2020.11.19 |