이전의 커밋과 합치고 싶어졌을 때 쓰는 명령어이다.참고로 unstaged changes가 있어서는 안되기에 working directory에서 변경사항이 있다면 commit이나 stash가 필요하다
$ git rebase -i HEAD~2
최근의 커밋부터 몇 개까지의 커밋을 봐야하는지 알아내고 위 명령어를 실행한다. 필요에 따라 숫자를 달리하면 된다.
pick 38eafa2 [Feedback] Card 수정
pick 62adbb8 Card class에서 struct로 수정
맨 위에 위와 같이 뜨는데, 최근 커밋이 맨 아래부터 나타난다. 아래 커밋을 위 커밋에 합치고 싶다면, 맨 위 커밋은 pick으로 냅두고, 밑에 커밋을 pick -> s 로 수정한다.
참고로 입력모드는 "a"로 들어가 수정하고, esc로 명령모드로 돌아온다. 명령모드에서 :wq로 저장하고 종료한다.
기본적으로 커밋들을 합쳐서 메시지를 작성해준다. 원하는대로 수정하고 나오면 된다.
# This is a combination of 2 commits.
# This is the 1st commit message:
[Feedback] Card 수정
* shape, rank의 private let -> let 으로 변경
* CustomStringConvertible 추가
* returnShape, returnRank 삭제
* Rank 타입 String -> Int 로 변경
* class -> struct 로 변경
# This is the commit message #2:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Mar 20 14:05:44 2023 +0900
#
# interactive rebase in progress; onto 10c8a14
# Last commands done (2 commands done):
# pick 38eafa2 [Feedback] Card 수정
# squash 62adbb8 Card class에서 struct로 수정
# No commands remaining.
# You are currently rebasing branch 'Step2-3' on '10c8a14'.
rebase는 협업 환경에서 주의할 것, 커밋들의 해시 값들이 바뀐다!!