커밋을 수정하는 건 정말 지양해야 하는 일이지만, 종종 필요할 때가 있다. 만약 해야한다면, 원격 레포지토리로 반영하기 전, 로컬에서만 진행하는 것을 추천한다.
상황 1: 커밋 내용을 수정하고 싶을 때
바로 전 커밋 내용을 수정하고 싶은 경우
git commit --amend -m "message to commit"
git push -f
이전 커밋 내용을 수정하고 싶은 경우
1. 먼저 HEAD
를 옮겨보자. 여기서 -i
는 interactive mode, 3
은 HEAD
기준 수정하고 싶은 커밋의 위치이다.
git rebase -i HEAD~3
2. 그럼 아래와 비슷한 구조의 VS Code 화면이 뜰 것이다.
pick b0e7837fd fix: Fix error with issue A
pick aeb0kafes fix: Change Object A to Object B
pick b012cbd0d fix: Change function A to function B
- 바꾸고 싶은
commit
에 해당하는pick
키워드를reword
로 바꿔준다.Ctrl
+S
로 저장한 후 화면을 닫고 기다리면 새로운 화면이 뜬다. - 새로운 화면에서 변경할 내용을 적고
Ctrl
+S
로 저장한 후 화면을 닫으면 끝!
상황 2: 커밋 내용을 합치고 싶을 때
연속된 커밋을 합치고 싶은 경우
1. 먼저 HEAD
를 옮겨보자. 여기서 -i
는 interactive mode, 3
은 HEAD
기준 수정하고 싶은 커밋의 위치이다.
git rebase -i HEAD~3
2. 그럼 아래와 비슷한 구조의 VS Code 화면이 뜬다.
pick b0e7837fd fix: Fix error with issue A
pick aeb0kafes fix: Change Object A to Object B
pick b012cbd0d fix: Change function A to function B
- 바꾸고 싶은 commit에 해당하는
pick
키워드를squash
로 바꿔주고 저장한 후 화면 닫으면 끝!
비연속적인 커밋을 합치고 싶은 경우
1. 먼저 HEAD
를 옮겨보자. 여기서 -i
는 interactive mode, 3
은 HEAD
기준 수정하고 싶은 커밋의 위치이다.
git rebase -i HEAD~3
2. 그럼 아래와 비슷한 구조의 VS Code 화면이 뜬다.
pick b0e7837fd fix: Fix error with issue A
pick aeb0kafes fix: Change Object A to Object B
pick b012cbd0d fix: Change function A to function B
- 여기서 순서를 바꿔주고 저장한 후, 내역이 바뀌었는지 확인, 또 그 후에
sqaush
를 사용하면 된다.
상황 3: 커밋을 되돌리고 싶을 때
먼저, git log
명령어로 커밋 로그를 확인, 내가 되돌리고 싶은 커밋의 commit hash
를 확인하고 복사해두자.
바로 전 커밋을 되돌리고 싶은 경우
아래 명령어를 통해 지우려는 커밋 전 커밋으로 돌아갈 수 있다.
git revert [commit hash]
중간에 있는 커밋을 되돌리고 싶은 경우
1. 없애려는 커밋 바로 전 커밋으로 돌아가자.
git checkout [commit hash]
2. 현재 상태를 베이스로 한 새로운 branch 만든다.
git checkout -b [new branch]
3. 지우려는 commit 후에 있는 commit 중, 갖고 오고 싶은 것 cherry-pick
하기 (원하는 만큼 반복)
git cherry-pick [commit hash]
4. 원래 branch로 돌아온 다음에, 지우려는 commit 바로 전 commit hash로 hard reset 하기
git checkout [original branch]
git reset --hard [commit hash]
5. 새로운 branch를 원래 브랜치로 merge
하기
git merge [new branch]
6. 만약 원격 레포지토리에 해당 내역을 반영하고 싶다면, force push
를 해야한다. 협업하는 경우, 최대한 지양하는 것이 좋다.
git push --force origin [original branch]
'Git' 카테고리의 다른 글
[Git] Git 저장소(repository) 미러링하는 법 (0) | 2023.07.03 |
---|