Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

미국 사는 수스의 코딩

Git 브랜치 병합/재배치 : Git rebase 본문

Git

Git 브랜치 병합/재배치 : Git rebase

캘리 사는 수스 2023. 3. 19. 15:56
반응형

git rebase는 git merge와 같이 branch를 합치는 방법입니다.

 

git rebase & git merge 차이점

  • git rebase는 다른 branch에서 현재 branch로 변경 사항을 적용하고 이전의 commit history를 정리하는 데 사용되는 반면, git merge는 두 개의 branch를 합쳐서 새로운 commit을 만드는 방법입니다.
    (빠른 이해를 위해서 아래 용도 예시를 읽어보는 것을 추천합니다)

git rebase 용도

  1. branch의 commit을 정리하기 위해서
  2. 작업하고 있는 branch의 base가 되는 branch가 업데이트가 되었을 때, 작업하고 있는 branch를 최신 상태로 업데이트하기 위해서.
  3. 여러 개발자가 동시에 작업하는 경우, 코드 충돌(git merge시 conflict)을 최소화하기 위해서
  4. 여러 개발자가 작업하는 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
Comments