미국 사는 수스의 코딩
Git 브랜치 병합/재배치 : Git rebase 본문
반응형
git rebase는 git merge와 같이 branch를 합치는 방법입니다.
git rebase & git merge 차이점
- git rebase는 다른 branch에서 현재 branch로 변경 사항을 적용하고 이전의 commit history를 정리하는 데 사용되는 반면, git merge는 두 개의 branch를 합쳐서 새로운 commit을 만드는 방법입니다.
(빠른 이해를 위해서 아래 용도 예시를 읽어보는 것을 추천합니다)
git rebase 용도
- branch의 commit을 정리하기 위해서
- 작업하고 있는 branch의 base가 되는 branch가 업데이트가 되었을 때, 작업하고 있는 branch를 최신 상태로 업데이트하기 위해서.
- 여러 개발자가 동시에 작업하는 경우, 코드 충돌(git merge시 conflict)을 최소화하기 위해서
- 여러 개발자가 작업하는 branch를 토대로 작업하는 경우, 중복되는 작업을 피하기 위해서
용도 예시)
더보기새로운 기능 개발을 진행하기 위해 dev branch를 토대로 새로운 branch, feature_1을 만들었습니다. 새로운 branch에서 코드 추가/수정을 하는 동안에, 다른 개발자들이 dev branch에 새로운 기능을 추가 및 버그 수정을 작업했을 경우, 우리는 우리가 만든 branch, feature_1에서도 dev branch의 변경 사항을 적용하여 최신 상태를 유지해야 합니다. 이 과정에서 feature_1 branch에서 dev branch로 rebase를 하게 되면, feature_1 branch에서 dev branch의 최신 변경 사항들이 적용하게 됩니다. 이로써 나중에, git merge (branch 병합)할 시에, 충돌을 최소화할 수 있습니다.
git rebase 예시
가정: Dev branch에 있는 `git_rebase_scenario.py` file에 새로운 기능을 위한 코드를 추가할 것입니다.(개발은 `branch_feature` branch에서 할 것입니다.) 추가하는 도중에, 다른 개발자가 Dev branch에 `git_rebase_scenario.py`를 업데이트하여, rebase를 통해 `branch_feature`를 최신버전으로 업데이트할 것입니다.
- Dev branch에 git_rebase_scenario 입니다.

- Dev branch에 git_rebase_scenario 파일에 다른 개발자가 업데이트하였습니다.`branch_feature`에 git_rebase_scenario 파일에 새로운 기능을 위해 코드를 추가하였습니다.


- Dev branch의 버전이 업데이트되었기에, `branch_feature`을 git rebase로 업데이트 해주어야 합니다.
(같은 파일에 같은 위치가 변경되었을 경우, 아래와 같이 충돌이 일어나게 됩니다.)
git rebase dev

- 충돌 부분을 고치고, 다시 git add -> git rebase --continue를 해주도록 합니다.
git add git_rebase_scenario.py
git rebase --continue

- github에 변경된 업데이트를 push 해주도록 합니다. (git rebase 후에는 기존의 commit history를 변경하기에, `--force` 옵션을 사용하여, 원격 저장소(remote repository)에 push해야 합니다.)
주의: 다른 개발자들이 같은 branch를 사용하고 있을시, `git push --force` 명령어를 사용하게 되면, 다른 개발자들의 작업 내용이 지워질 수 있기 때문에, 주의가 필요합니다.
git push origin branch_feature --force

- 지금까지의 과정을 이해하기 위해 'branch_feature' branch에서 git log를 확인해봅시다.
git log --all --oneline --graph


- 위 그림 설명: git rebase 하기 전에는 'branch_feature' branch에 'Fix: bug' commit이 존재하지 않았고, git rebase 후에 dev에서 업데이트된 commit을 들고 온 것입니다.
반응형
'Git' 카테고리의 다른 글
Git 브랜치 병합 : Git merge (0) | 2023.03.15 |
---|---|
Git 커밋 취소 : Git revert 되돌리기 (0) | 2023.03.15 |
Git Command 취소 : Git reset (0) | 2023.03.05 |
Git 명령어 정리 | 예시 (0) | 2023.03.01 |
Git 용도와 구성 설명 (0) | 2023.02.27 |