git merge
명령어 외에도, 브랜치를 병합하는 또 다른 방식이 있습니다.
이는 git rebase
입니다.
git rebase
는 git merge
와 같이
하나의 브랜치에서 또 다른 브랜치로 변강 사항을 병합시킨다는 같은 목적을 위해 사용됩니다.
하지만, 이러한 방법론들의 원칙은 서로 다르며, 각자 스스로의 장점과 단점을 가지고 있습니다.
그러므로, 서로 다른 상황에서, 알맞는 것을 하나 고르면 되는 겁니다.
밑에서 우리는 이 명령어들 같의 차이점을 좀 더 자세하게 분석 할 것이며,
git rebase
를 어떻게 사용하는 지 배울 겁니다.
Merge vs rebase - Merge 와 rebase 비교
이 두 명령어 간의 차이점은 힐끗 보았을 때는 미묘합니다.
그러므로, 그림의 재미있는 예제로 이를 쉽고 명확하게 만들어 봅시다.
우리는 아름다운 얼룩 고양이에 리본을 달아야 하는 임무가 있다고 말해 봅시다.
이 고양이는 두 개의 브랜치로 개발되었습니다.
main 브랜치에서는 계속해서 고양이를 그렸으며, 마지막 단계에서는 리본을 달아 주었습니다.
예를 들어, 또 다른 브랜치인 feature에서는, 고양이에 색칠했습니다.
우리가 모든 것을 그리고, 색칠했을 때, 브랜치들을 병합 할 수 있습니다.
우리가 만약 git merge
명령어를 사용한다면, 그림의 첫 번째 부분에서 얻을 수 있는 것 처럼,
두 브랜치는 함께이며, 그들의 결과는 완벽하게 고양이에 리본을 달고, 색칠하였습니다.
우리는 고양이를 개발하는데 있어 모든 단계의 전체적인 역사를 볼 수 있습니다.
지금 다시 돌아와서, git rebase
를 사용 해 봅시다.
우리는 서로 다른 수정된 고양이를 가진 두 개의 브랜치를 가지고 있습니다.
그리고 맨 마지막에 우리가 갖는 것은 마지막 고양이 버전을 가지고 있는 하나의 주요 브랜치입니다.
이 스토리는 여전히 빨간색으로 칠해진 고양이를 가지고 있는 브랜치가 여전히 있다는 사실을 말하지 않습니다.
우리는 그저 필요 한 곳으로 이동했으며, 중간에 있는 모든 것은 삭제했습니다.
이 스토리란,
git rebase
로 인해 빨간 고양이가 있는 feature 브랜치가 여전히 남아있다는 것을 말합니다
즉, 원래feature
브랜치는 기능 제작이 완료 된 후에 병합되고 삭제되어야 하지만, 여전히 남아있다는 것을 강조합니다.
맨 마지막의 문장 뜻은, 이해하기 위해 필요한 문장은 말했지만, 중간에서 일어나는 모든 일은 생략하고 말했다는 겁니다.
이것이 git merge
와 git rebase
간의 주요한 차이점입니다.
git merge
는 두 개의 브랜치를 병합하고, 변경 사항에 대한 모든 기록을 저장하고 있습니다.
그러므로, 우리는 우리의 모든 행동에 대해 추적 할 수 있는 능력을 가졌습니다.
단점은 브랜치의 너무 긴 기록으로 인해 혼란에 빠지기 쉽다는 겁니다.
git rebase
명령어는 가장 중요한 타겟 브랜치로 움직이며, 기록을 다시 작성하므로, 몇몇 부분은 그냥 사라집니다.
git rebase
의 장점 commit들 속에서 절대 길을 잃어버리지 않는다는 것 입니다.
당신이 코드를 작성하며, commit을 정말 많이 하는 거대한 프로젝트들에서 매우 편리하며, 경제적일 것 입니다.
Rebase usage - Rebase 사용법
rebase를 적용하기 위한 가장 간단한 예시로, 밑의 명령어를 터미널에 작성 해야 합니다 :
$ git checkout feature
$ git rebase main
그리고 만약 당신이 commit을 넘어선 조정과 힘을 느끼고 싶다면, 밑의 명령어를 수행 해 보세요 :
$ git checkout feature
$ git rebase -i main
따라서, 새로운 브랜치로 움직일 때, commit들을 변경하는 것도 가능 할 겁니다.
말 그대로 feature
브랜치를 main
브랜치로 병합하기 전에, 기록을 깔끔하게 만드는 용도로 사용합니다.
이 명령어를 실행시킨 후에, 에디터가 움직이게 될 모든 커밋의 리스트를 보여 줄 겁니다.
pick 48g8m10b Commit message #1
당신은 상세하게 이러한 커밋들의 리스트를 볼 수 있습니다.
48g8m10b
와 같은 숫자의 순열은 commit 식별자이며,
Commit message #1
은 메세지이며,
pick
명령어는 이 commit을 사용하겠다는 의미입니다.
commit에 무엇을 또 할 수 있을까요?
당신은 reword
명령어를 사용하여 메세지를 변경할 수 있고,
drop
명령어를 사용하여 commit을 삭제할 수도 있으며,
squash
명령어를 사용하여 이전의 commit과 융합할 수 있습니다.
마지막 명령어는 특히 당신이 gitflow 모델을 사용하고 있을 때 유용하며,
새로운 기능을 당신의 개발 프로그램 혹은 릴리즈 브랜치에 추가하고 싶을 때 유용합니다.
이는 당신의 기록을 깔끔하게 유지할 겁니다.
설명과 함께 전체적인 명령에 대한 목록을 에디터 자체에서 볼 수 있습니다.
Conclusion - 결론
git rebase를 익히는 데 초기 단계에서, 이는 어렵고, 도전적으로 보일 수 있습니다.
하지만, 당신이 거대한 개발 팀에 참여하기 시작한다면, git rebase의 아름다움에 감사 할 겁니다.
commit을 깔끔히 하고, 이해하기 쉬운 commit 기록을 가지기 위해서,
git rebase를 사용하는 것이 낫지만, 이를 현명하게 사용해야 한다는 것을 기억하세요.
words to remember
principles : 원칙, 원리, 주의
subtle : 미묘한, 세밀한, 교활한, 묽은
glance : 섬광, 일별, 힐끗 봄, 얼른 보다, 흘긋 주다, 번득이다
downside : 단점
economical : 경제적, 경제의, 경제상의
squash : 밀치고 들어가다, 짓누르다, 철썩 떨어지다
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Git' 카테고리의 다른 글
Explore folders and files - 터미널로 폴더와 파일 탐색하기 (1) | 2024.06.02 |
---|---|
Semantic versioning - 의미론적 버전 관리 (시멘틱 버저닝) (1) | 2024.06.01 |
Gitflow auxiliary branches - Gitflow와 보조 브랜치 (1) | 2024.05.30 |
Introduction to Gitflow - Gitflow에 대한 소개 (0) | 2024.05.29 |
Git branches - Git 브랜치 (0) | 2024.05.29 |