반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

테크매니아

Git commit을 수정하는 3가지 방법 본문

카테고리 없음

Git commit을 수정하는 3가지 방법

SciomageLAB 2024. 10. 20. 16:50
반응형

1. amend : commit을 수정

commit을 수정 할 수 있다.

dkdk@DESKTOP-HLOMORS:~/git/GitSampleProject (main) $ ls
README.md  test.py
dkdk@DESKTOP-HLOMORS:~/git/GitSampleProject (main) $ git log
commit 992b7c9209ddb451e84d9212c01169dff1e48aaa (HEAD -> main)
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:58:17 2022 +0900

    add test.py

commit 38e96219afacb708d817e111c85b799e5aee0e42
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:52:52 2022 +0900

    First commit

예시의 경우 README.md와 test.py가 있는 상태에서 이미 commit을 해버렸고
추가로 run.py 파일을 추가 해야 하는 상황에서 git commit --amend을 쓰면 된다.

dkdk@DESKTOP-HLOMORS:~/git/GitSampleProject (main) $ git commit --amend
[main 3b56000] add test.py run.py
 Date: Fri Mar 4 00:58:17 2022 +0900
 2 files changed, 7 insertions(+)
 create mode 100644 run.py
 create mode 100644 test.py

commit id가 바뀌고 내용도 바뀐다. 그래서 remote에 이미 push 해 버렸다면 -f 옵션을 줘서 강제로 업데이트 해야 한다. 다른 사용자가 있을 때 혼란을 줄 수 있으니 remote에 이미 push 한 경우 지양해야 겠다.

dkdk@DESKTOP-HLOMORS:~/git/GitSampleProject (main) $ git log
commit 3b5600080c98ee1f8ff6c9e6f675d5cd00252980 (HEAD -> main)
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:58:17 2022 +0900

    add test.py run.py

commit 38e96219afacb708d817e111c85b799e5aee0e42
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:52:52 2022 +0900

    First commit

2. git checkout

아래 3개의 commit이 있는 상황에서 HEAD는 최신 0765d에 있고, 3b560으로 가고 싶을 때
git checkout <commit id>를 쓰면 해당 commit으로 이동할 수 있다.

dkdk@DESKTOP-HLOMORS:~/git/GitSampleProject (main) $ git log
commit 0765d7e4b6c80a675094420ae232de57a0934b33 (HEAD -> main)
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 01:05:56 2022 +0900

    Update README.md

commit 3b5600080c98ee1f8ff6c9e6f675d5cd00252980
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:58:17 2022 +0900

    add test.py run.py

commit 38e96219afacb708d817e111c85b799e5aee0e42
Author: dankernel <dkdkernel@gmail.com>
Date:   Fri Mar 4 00:52:52 2022 +0900

    First commit

특정 파일만 해당 commit의 상태로 바꾸려면 git checkout <commit id>--<file path> 하면 된다.
해당 commit에서 특정 파일이 없으면 없어지고, 있으면 생기고, 바뀌면 바뀐게 적용 된다.

아래와 예제와 같이 실행할 수 있다.

(main) $ git checkout 3b560--README.md

–soft, –mixed, –hard

soft는 HEAD만, mixed는 index까지, hard는 working 디렉토리까지 바꾼다.

reset

* commit cea2b0ae87b71fd1f509ae3818ac76f9bca65f79 (main)
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:18:35 2022 +0900
|
|     Update README logger
|
| * commit 74a0d1f59e01a01b646d625f6598c34024834e20 (HEAD -> feature-01)
| | Author: dankernel <dkdkernel@gmail.com>
| | Date:   Fri Mar 4 01:17:15 2022 +0900
| |
| |     Add error log
| |
| * commit cd819b5513f7c724bb36fa28164b7c833f1cbc15
|/  Author: dankernel <dkdkernel@gmail.com>
|   Date:   Fri Mar 4 01:16:40 2022 +0900
|
|       logger.py
|
* commit 0765d7e4b6c80a675094420ae232de57a0934b33
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:05:56 2022 +0900
|
|     Update README.md
|
* commit 3b5600080c98ee1f8ff6c9e6f675d5cd00252980
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 00:58:17 2022 +0900
|

main 브랜치와 feature-01 브랜치로 나눠진 상황에서 checkout과 reset을 비교 해 보려고 한다.

git checkout main

checkout으로 main 브랜치로 옳기면 아래와 같이 (당연히 feature-01 브랜치는 그대로 있고) HEAD만 main으로 이동 한다.

(main) $ git log --branches --graph
* commit cea2b0ae87b71fd1f509ae3818ac76f9bca65f79 (HEAD -> main)
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:18:35 2022 +0900
|
|     Update README logger
|
| * commit 74a0d1f59e01a01b646d625f6598c34024834e20 (feature-01)
| | Author: dankernel <dkdkernel@gmail.com>
| | Date:   Fri Mar 4 01:17:15 2022 +0900
| |
| |     Add error log
| |
| * commit cd819b5513f7c724bb36fa28164b7c833f1cbc15
|/  Author: dankernel <dkdkernel@gmail.com>
|   Date:   Fri Mar 4 01:16:40 2022 +0900
|
|       logger.py
|
* commit 0765d7e4b6c80a675094420ae232de57a0934b33
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:05:56 2022 +0900
|
|     Update README.md
|
* commit 3b5600080c98ee1f8ff6c9e6f675d5cd00252980
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 00:58:17 2022 +0900
|

근데 이렇게 안하고, git reset main을 해버리면 아래와 같이 main 브랜치와 feature-01브랜치가 같은 commit을 향하게 된다.

(feature-01) $ git log --branches --graph
* commit cea2b0ae87b71fd1f509ae3818ac76f9bca65f79 (HEAD -> feature-01, main)
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:18:35 2022 +0900
|
|     Update README logger
|
* commit 0765d7e4b6c80a675094420ae232de57a0934b33
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 01:05:56 2022 +0900
|
|     Update README.md
|
* commit 3b5600080c98ee1f8ff6c9e6f675d5cd00252980
| Author: dankernel <dkdkernel@gmail.com>
| Date:   Fri Mar 4 00:58:17 2022 +0900
|
|     add test.py run.py
|
* commit 38e96219afacb708d817e111c85b799e5aee0e42
  Author: dankernel <dkdkernel@gmail.com>
  Date:   Fri Mar 4 00:52:52 2022 +0900

      First 

reset## git reset을 되돌리는 방법

git reset을 하면 HEAD도 옮겨지고 브랜치도 옮겨져 버리는데 이걸 되돌리는 방법은 다음과 같다.

git reflog로 기록을 보고 git reset --hard로 복구 할 수 있다.

(feature-01) $ git reflog
cea2b0a (HEAD -> feature-01, main) HEAD@{0}: reset: moving to main
74a0d1f HEAD@{1}: checkout: moving from main to feature-01
cea2b0a (HEAD -> feature-01, main) HEAD@{2}: checkout: moving from feature-01 to main
74a0d1f HEAD@{3}: checkout: moving from main to feature-01
cea2b0a (HEAD -> feature-01, main) HEAD@{4}: commit: Update README logger
0765d7e HEAD@{5}: checkout: moving from feature-01 to main
74a0d1f HEAD@{6}: commit: Add error log
cd819b5 HEAD@{7}: commit: logger.py
(feature-01) $ git reset --hard HEAD@{1}
HEAD is now at 74a0d1f Add error log

revert

잘못된 commit을 고쳤다는 내용의 새로운 commit을 만들 수 있다.

참고문서

반응형