아리의 iOS 탐구생활

[Git] Rebase를 활용하여 이전 커밋 수정하기 본문

GitHub/Git

[Git] Rebase를 활용하여 이전 커밋 수정하기

Ari Lee 2021. 11. 23. 22:43
반응형

최신 커밋이 아니라 이전 커밋들을 수정하려면 interactive rebasing을 활용하면 된다.

대신 이전 커밋을 수정하게 된다면 그 커밋 이후에 생긴 커밋들도 모두 업데이트가 되 그점을 유의해야 한다.

 

git rebase -i 12345ab

위와 같이 -i 옵션을 사용하여 수정을 원하는 커밋 이전 커밋의 해시코드를 넣어주면 그 다음에 이어지는 모든 커밋들이 나와있는 걸 확인할 수 있다.

 

pick <해시코드> 커밋메세지

위와같이 커밋들이 표시가 되는데, 아래에 메세지들을 살펴보면 다음과 같이 명령어들이 정리되어있다.

# Rebase 98955fc..0ddd7ab onto 98955fc (4 commands)
#
# Commands:
# p, pick <commit> = use commit (이거 괜찮으니까 이거 써!)
# r, reword <commit> = use commit, but edit the commit message (괜찮지만 메세지를 변경하겠다!)
# e, edit <commit> = use commit, but stop for amending (커밋을 쓰긴 쓸건데 안에 변경사항을 바꿀거야)
# s, squash <commit> = use commit, but meld into previous commit(커밋을 하나로 묶어줄거야!)
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor (스쿼시와 비슷하지만 메세지를 남기지 않는것임)
# x, exec <command> = run command (the rest of the line) using shell (커밋으로부터 shell명령어를 직접적으로 이용하고 싶을때 사용)
# b, break = stop here (continue rebase later with 'git rebase --continue') (여기서 멈추는 일)
# d, drop <commit> = remove commit (해당하는 커밋을 제거할때)
# l, label <label> = label current HEAD with a name (
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified); use -c <commit> to reword the commit message
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# 여기 줄을 제거하면 해당 커밋을 잃어버립니다!
#
# However, if you remove everything, the rebase will be aborted.
#

커밋메세지를 수정하려면 아래와 같이 r을 작성해주고 저장 후 창을 닫아주면 된다.

그럼 다음과 같이 commit 메세지를 수정할 수 있게 편집기가 다시 등장하는데,

커밋메세지를 수정한 후 저장하고 창을 닫아주면 변경된 메세지가 적용된 것을 확인할 수 있다.

 

 

수정할 커밋이 여러개라면 계속 편집기가 새롭게 열린다.

만약 수정할 커밋이 남았는데 편집기가 열리지 않는다면 git rebase --continue 명령어를 입력해서 계속 진행한다.

 

 

rebase를 활용할 때 주의할 점은 꼭 서버가 push가 된 히스토리를 이런 방식으로 rebase를 하는 것은 위험하다.

혼자서 작업을 하는거면 상관없지만 나 이외에 다른 개발자와 함께 일을 하는 경우라면 지양해야한다.

 

혼자서 작업중이고
이미 push가 된 히스토리를 rebase를 통해서 수정해주었다면
git push -f 옵션을 사용해 강제푸쉬를 진행해야한다.

 

 

Reference

 

Git 마스터 과정 (기본개념부터 실무팁까지)

Commit과 Push은 그저 Git의 티끌인 것을 이 강의를 통해 알게되었습니다!! Git의 전체적인 이해부터 설치, 셋팅, 기본적인 명령어와 옵션(add, status, commit, log 등등..), Branch, Merge, Conflict, Rebase, Stash ... R

academy.dream-coding.com

 

반응형

'GitHub > Git' 카테고리의 다른 글

[Git] Basics, commit  (0) 2021.09.02
Comments