이전 포스팅 이후 진행되는 내용입니다.
2019/11/09 - [Git] - [Git] 자세히 알아보기, branch, tag
rebase 란? |
깃을 합병하는 또다른 방법으로는 rebase라는 방법이 존재합니다.
단어 그대로 re / base 즉 공통 조상커밋인 base를 다시 설정한다 해서 rebase입니다.
실습 과정을 그대로 가져옵니다.
2019/11/18 - [Git] - [Git] merge, rebase 를 위한 실습환경 만들기
만약 이전에 merge 강의로 merge 하였으면 아래와 같은 명령으로 merge를 되돌릴 수 있습니다.
$ git reset HEAD~1 --hard
해당 명령은 후에 자세하게 다루도록 하겠습니다.
현재 실습 파일에 히스토리는 아래와 같습니다.
만약 branch가 master인 경우 checkout으로 run으로 돌아옵니다
merge가 현재 branch에 합병할 branch를 합치는 것이면
rebase는 현재 branch를 합병할 branch로 다시 base 설정하여 합치는 것이기 때문입니다.
여기서 rebase를 하게되면 merge에서 base였던 734ba79를 10c0753으로 변경하게 됩니다.
즉, base의 내용을 master가 가지고 내용을 추가하고 branch에서 추가 내용이 있다면 그걸 master에 붙여서 내용을 통합하는 것인데...
아래와 같은 과정으로 진행됩니다.
먼저 임시 저장소에 branch의 내용을 담아두고 임시 저장소의 내용을 master 뒤에 합병합니다.
(이 과정에서 충돌이 있으면 해당 충돌을 해결하도록 내용이 나옵니다 뒤에서 직접 확인하도록 합시다)
이렇게 붙여진 branch의 커밋을 6097e90` 이라고 하면 run branch는 6097e90`을 가리키도록 이동하면서 아래와 같은 그림이 됩니다.
그리고 이 상태에서 master와 run을 합치려면 fast-forward merge를 하면?
이렇게 변화하고 해당 run branch를 삭제하는 것으로 rebase는 merge와 다르게 히스토리를 깔끔하게 유지 할 수 있습니다.
직접 가지고 있던 실습 파일로 실습을 진행해 봅시다.
$ git rebase run
으로 run과 rebase를 진행하면 아래와 같이 아주 긴 문장이 올라옵니다.
대충 보면 conflict가 발생했고 add하고 continue하거나 해당 커밋을 skip하는 방법 rebase를 무시하는 방법 등 세세하게 적혀있는데,
해당 과정을 따라 진행해 봅시다.
먼저 충돌 부분을 수정합니다.
그리고
$ git rebase --continue
하면 아래와 같이 rebase가 됩니다.
rebase의 장단점 |
rebase를 하면 히스토리를 아주 깔끔하게 유지 할 수 있다는 장점이 있습니다. 따라서 어떻게 코드가 변하는지 한눈에 보기 쉽습니다.
하지만 반대로
rebase는 merge보다 큰 위험성을 가지고 있고 준수할 내용이나 조건이 까다롭기 때문에 초급자는 사용하는 것을 비추천 합니다.
위험성에 관한 내용은 아래에서 잘 설명되어 있으므로 해당 내용을 참고해주시기 바랍니다.
https://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase%ED%95%98%EA%B8%B0
'Git > Git - 시작하기' 카테고리의 다른 글
[Git] reset 자세히 알아보기 (0) | 2019.12.06 |
---|---|
[Git] reflog 란? (0) | 2019.12.05 |
[Git] merge 개념 알아보기 (0) | 2019.11.18 |
[Git] merge, rebase 충돌(conflict)이란? (0) | 2019.11.18 |
[Git] merge, rebase 를 위한 실습환경 만들기 (0) | 2019.11.18 |