-
[GitHub] Rebase -i로 커밋 합치고 편집하기Github 2020. 12. 20. 00:16
git에서 사용되는 Rebase는 주로 커밋을 병합하는 일 등에 쓰이지만, 쓰임새가 한 가지 더 있는데,
바로 interactive(대화형) 옵션이다.
git rebase -i HEAD~{HEAD포인터로부터의 커밋 갯수} 명령어를 사용하여 HEAD로부터 일정 범위의 커밋을 선택하여 편집할 수 있다.
해당 명령어를 입력하면, 아래 화면과 같은 내용이 출력되면서 vi 편집기 화면으로 진입한다.
아래에는 각각의 옵션들에 대한 설명이 나와있는데,
각 옵션들을 함께 실습하며 어떤 역할을 하는 지 알아보도록 하자.
Pick
위 캡쳐화면에 pick이라고 표시된 두 개의 커밋은 현재 사용된다는 것을 의미하며,
해당 표시가 되어 있는 커밋은 어떠한 편집이 가해지거나 하지는 않는다.
하지만 pick 표시가 되어있다하더라도, 커밋의 순서는 바꿀 수 있다.
원래의 순서가 이랬던 것을,
이렇게 바꿔서 :wq를 입력한 뒤 빠져나오면,
커밋의 순서가 바뀌기 때문에(!), 당연하게도 충돌이 일어나게 된다.
해당 충돌을 해결하고, git rebase --continue를 실행해보면,
보다시피 rebase가 완료되어, 두 커밋의 위치가 바뀌었다.
그러나 두 커밋의 순서를 역순으로 바꾸는 일이다보니, 커밋의 충돌을 해결하는 과정에서 코드가 꼬일 수 있어,
일반적인 경우에는 비추천하며, 개인 프로젝트를 작업할 때에나 가끔 사용하는 것이 좋을 듯하다.
Squash
해당 커밋을 이전 커밋으로 병합하고 싶을 때에 주로 사용한다.
너무 커밋을 일찍 해버렸거나, 두 개의 애매한 커밋을 하나로 합치고 싶을 떄에 사용하는 편이다.
:wq를 입력하여 빠져 나오면,
커밋 메시지를 입력하는 화면이 나온다. 여기서도 마찬가지로 :wq를 눌러 나와주면
두 커밋이 하나로 통합된 것을 확인할 수 있다.
Fixup
이것도 squash와 마찬 가지로 이전 커밋과 합치는 데에 사용된다.
하지만 squash와의 차이점은 아까와 달리 커밋 메시지를 다시 수정하거나 하는 화면이 표시되지 않는다는 것.
Reword
reword는 해당 커밋의 메시지를 변경할 때 사용된다.
:wq를 입력하고 빠져나오면,
위와 같이 커밋 메시지를 수정하라는 화면이 나오고, 거기서 메시지를 수정하면 된다.
수정된 사항을 확인할 수 있다.
Drop
drop은 해당 커밋을 삭제하는 명령이다.
커밋이 삭제되었다.
마무리하며
git rebase의 대화형 옵션으로 커밋 목록을 편집하는 방법에 대하여 알아보았다.
나는 이런 옵션을 접하면서 굉장히 유용한 기능이라고 생각은 했지만,
막상 실제로 사용하게 될 상황이 온다면, 아주 신중해질 것 같다.
왜냐하면, 원래 rebase라는 게 그렇듯이 커밋의 이전 히스토리를 건드는 일이기 때문에,
순서가 뒤죽박죽이 될 수 있고 충돌이 날 가능성이 증가한다.
그리고 무엇보다도, 혼자서 개발하는 경우에는 상관이 없지만,
변경된 히스토리를 push하여 원격지에 적용하는 경우엔 모든 코드가 꼬여버리는 사태가 생길 수 있을 것 같아서,
정말 왠만한 상황이 아니고서는 잘 사용하지 않을 것 같다.
'Github' 카테고리의 다른 글
[GitHub] Tag란? (0) 2020.12.19 [Github] Stash란? (0) 2020.11.24 [Github]브랜치란? (0) 2020.11.21 [GitHub] Git push 오류 - fatal: The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use 해결방법 (0) 2020.11.07 [GitHub] 원격 저장소에 깃 연결하기 (0) 2020.11.05