성장과정(dev)/Git (feat. github, bitbucket)

[협업] git 작업브랜치 main (마스터) branch 기준으로 최신화 하기

lowellSunny 2025. 1. 7. 23:02

Git Pull vs Git Rebase

https://www.atlassian.com/git/tutorials/merging-vs-rebasing

문서 내용 정리해보자면

git pull 은 git fetch & git merge 을 연이어 실행하는 것이다.

그래서 git rebase 와 git merge 를 비교해보기로 하자.

 

[[참고]]

ex) $ git fetch origin

git fetch는 **원격 저장소(remote)**의 변경 사항을 로컬 저장소로 가져오지만, 로컬 브랜치에는 병합하지 않는 명령어입니다.

 

 

git 브랜치 상황 예시

main 으로부터 새로운 나의 feature branch A 에서 작업중이다.

main 에 새로운 커밋이 들어왔고, 내가 작업중인 내용과 관련이 있기 때문에 이 커밋을 가져와야한다.

이 때, 커밋을 A 브랜치로 가져오는 두가지 방법 merging or rebasing가 있다.

 

1. merging 사용하기 (main 의 최신 내용을 feature 브랜치로 가져오기)

git checkout feature
git merge main

 

깔끔하게 main 의 커밋을 가져온다. 기존 브랜치에 아무런 변화가 생기지 않으며 이로 인해 리베이스에서 발생할 수 있는 잠재적인 문제점들을 피할 수 있다

 

 

2. rebasing

이건 내가 자주 사용하던 방법인데, 뭐가 문젠가 했다.

rebase 는  커밋 히스토리 를 다시 작성한다. 커밋 번호가 바뀐다는 뜻이다.

 

문제상황 ex

  1. 협업 중 충돌 가능성
    다른 개발자와 협업할 때, 이미 공유된 커밋을 Rebase하면 커밋 번호가 바뀌어 다른 개발자들의 작업 내역과 충돌이 발생할 수 있습니다.
  2. 커밋 히스토리 추적 어려움
    Rebase를 하면 커밋 히스토리가 깔끔하게 정리되지만, 기존 커밋 번호가 바뀌기 때문에 과거의 작업 히스토리를 추적하기 어려워질 수 있습니다.

 

그래서 협업 중 공유된 브랜치에서는 절대!절대! rebase 하지 말 것

 

 

 

 

git update

마지막으로, intellij 에서 git Update Project 는 merge 와 rebase 중 선택할 수 있는 기능임