Git - 마지막 commit 수정, 삭제

By JS | Last updated: June 17, 2021

이전에 등록한 commit을 삭제하거나 수정하여 다시 등록하는 방법을 소개합니다.

예제와 함께 명령어 사용 방법을 알아보겠습니다.

Example

다음과 같이 3개의 commit을 등록하였습니다.

이 때, 가장 마지막에 등록한 "Third commit"에 문제가 발견되어 수정을 하고 싶습니다.

$ git log
commit 5ca58dbd90777fb15f4dbecbf02225604956e478 (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:16 2021 +0900

    Third commit

commit 018bf8778f4ee3d2fcb0791865412c92a5142400
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:00 2021 +0900

    Second commit

commit 0b9490b1ad37be391d8d1dde727c62c7cc707819
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:24:39 2021 +0900

    First commit

Solution : 마지막 commit 수정

git reset --soft HEAD~1

git reset --soft HEAD~1는 가장 최근에 반영한 commit 1개를 취소하고, 수정 내용을 staged 상태로 만들어 다시 수정이 가능하도록 합니다.

~N은 되돌릴 commit 개수를 의미합니다. ~2는 최근 commit 2개를 되돌리라는 의미입니다.

다음과 같이 입력하면, "3rd commit"(commit 5ca58)이 제거되고, 수정 내용은 staged 상태로 남아있습니다.

$ git reset --soft HEAD~1


$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   Test.java
$ git diff --cached
diff --git a/Test.java b/Test.java
index c61686b..6ae8c92 100644
--- a/Test.java
+++ b/Test.java
@@ -1,2 +1,3 @@
 First commit
-Second commit
\ No newline at end of file
+Second commit
+Third commit
\ No newline at end of file

수정을 하고 다시 commit을 하면, 수정된 내용이 다시 적용됩니다.

$ git log
commit 2ef469a827eee90935d8a28d787264456b7e67ee (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:26:50 2021 +0900

    Third commit (+ fix)

commit 018bf8778f4ee3d2fcb0791865412c92a5142400
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:00 2021 +0900

    Second commit

commit 0b9490b1ad37be391d8d1dde727c62c7cc707819
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:24:39 2021 +0900

    First commit

git commit --amend

commit을 되돌리지 않은 상태에서, 파일을 수정하고 --amend 옵션으로 commit을 하는 방법이 있습니다.

예를 들어, 다음과 같이 수정하였습니다. diff를 보면 아래처럼 보입니다.

$ git diff
diff --git a/Test.java b/Test.java
index 7a9e8cc..bb52d56 100644
--- a/Test.java
+++ b/Test.java
@@ -1,3 +1,3 @@
 First commit
 Second commit
-Third commit(+ fix)
\ No newline at end of file
+Third commit(+ fix + fix)
\ No newline at end of file

git commit --amend 명령어로 commit을 하면, 새로운 commit이 추가되지 않고, 가장 최근의 commit이 수정됩니다.

$ git commit --amend
[master dc29857] Third commit (+ fix + fix)
 Date: Thu Jun 17 22:26:50 2021 +0900
 1 file changed, 2 insertions(+), 1 deletion(-)

새로운 commit이 추가되지 않고, commit 메시지가 변경된 것을 볼 수 있습니다.

$ git log
commit dc29857d0a832afaf7504542d09f8f7f6b721638 (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:26:50 2021 +0900

    Third commit (+ fix + fix)

commit 018bf8778f4ee3d2fcb0791865412c92a5142400
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:00 2021 +0900

    Second commit

commit 0b9490b1ad37be391d8d1dde727c62c7cc707819
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:24:39 2021 +0900

    First commit

마지막 commit의 수정사항을 보면, 다시 수정한 것이 적용되었습니다.

commit dc29857d0a832afaf7504542d09f8f7f6b721638 (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:26:50 2021 +0900

    Third commit (+ fix + fix)

diff --git a/Test.java b/Test.java
index c61686b..7a9e8cc 100644
--- a/Test.java
+++ b/Test.java
@@ -1,2 +1,3 @@
 First commit
-Second commit
\ No newline at end of file
+Second commit
+Third commit(+ fix)
\ No newline at end of file

Solution : 마지막 commit 삭제

git reset --hard HEAD~1

다음과 같이 --hard 옵션은 commit을 삭제하고, 수정 내용을 staged 상태에 두지 않고 삭제합니다. commit 뿐만 아니라 수정 내용이 모두 삭제됩니다.

$ git reset --hard HEAD~1
HEAD is now at 018bf87 Second commit

status를 확인하면 staged 상태에 남아있는 것이 없습니다.

$ git status
On branch master
nothing to commit, working tree clean

로그를 보면 마지막 commit이 삭제된 것을 확인할 수 있습니다.

$ git log
commit 018bf8778f4ee3d2fcb0791865412c92a5142400 (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:00 2021 +0900

    Second commit

commit 0b9490b1ad37be391d8d1dde727c62c7cc707819
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:24:39 2021 +0900

    First commit

이제 코드를 수정 하고 다시 commit하면 됩니다.

$ git commit
[master 0b831ac] Third new commit
 1 file changed, 2 insertions(+), 1 deletion(-)


$ git log
commit 0b831acb6fb6200d45961a89b61f75d3a0de3576 (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:56:42 2021 +0900

    Third new commit

commit 018bf8778f4ee3d2fcb0791865412c92a5142400
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:25:00 2021 +0900

    Second commit

commit 0b9490b1ad37be391d8d1dde727c62c7cc707819
Author: JS <farfs.dev@gmail.com>
Date:   Thu Jun 17 22:24:39 2021 +0900

    First commit
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha