본문 바로가기

[Next.js 번역 프로젝트] pull을 통한 브랜치 최신화

[Next.js 번역 프로젝트] pull을 통한 브랜치 최신화

번역 프로젝트 첫 포스팅의 브랜치 최신화에 대한 내용 중에서 이번 포스팅은 브랜치 최신화 방법 중 pull을 사용한 내용에 대한 기록이다.

 


해당 포스팅 발췌 내용

 

브랜치 최신화 시키기

 

... (생략)

 

📌 간단한 버전Pull

  • git pull 명령어는 git fetch와 git merge를 합친 것이다.
  • git fetch는 원격 저장소의 최신 변경 사항을 가져오고, git merge는 가져온 변경 사항을 현재 브랜치에 병합한다.
  a. 'git pull upstream main'을 통해 원본 레포지토리의 업데이트 내용을 Pull한다.
  b. 충돌한 게 있다면 해결한다.
  c. 'git push origin [내가 작업 중인 브랜치명]'을 통해 pull 해온 commit들을 push해준다.

 


 

a. 원본 레포지토리의 업데이트 내용을 pull 

git pull upstream main

이렇게 했더니 아래와 같이 terminal에 오류 메시지가 떴다.

 

 

 

🟣 오류 메시지 해석

이 오류는 Git에서 pull 명령을 실행할 때 발생하는 것으로, 여러 개의 브랜치가 서로 다른 커밋을 가지고 있는 상황에서 Git이 어떻게 이를 조율해야 할지 지정해 주어야 한다는 의미이다.

  •  즉, 어떤 방식으로 브랜치를 통합할지를 명시해야 한다.
  • Git은 기본적으로 pull 명령을 실행할 때 두 가지 방법을 사용할 수 있다 : merge와 rebase
pull 명령은 실제로 fetch와 merge를 결합한 것이다. 

그러나 때로는 Git이 병합 방식을 자동으로 결정하는 대신 사용자가 병합 방식을 명시적으로 지정할 필요가 있다. 이는 두 개 이상의 브랜치가 서로 다른 커밋을 가지고 있을 때 발생하는 경우이다. merge와 rebase는 이러한 명시적인 병합 방식을 지정하는 두 가지 주요 옵션이다.

 

각각의 방법은 브랜치를 통합하는 다른 방식을 사용한다.

  • merge : 이 방식은 두 개의 브랜치를 병합하여 새로운 커밋을 생성한다.  
  • rebase : 이 방식은 현재 브랜치를 대상 브랜치의 최신 커밋 위로 이동시킨다. 이렇게 하면 변경 내용을 대상 브랜치에 직렬적으로 적용할 수 있다. rebase는 커밋 히스토리가 더 깔끔하고 선형적으로 유지되지만, 기존 커밋들의 기록을 변경하므로 조심해서 사용해야 한다.

이 오류를 해결하려면 Git 명령에서 아래 중 하나를 실행하여 브랜치 통합 방식을 지정해야 한다. 이는 pull 명령에 대한 옵션을 설정하는 것이다. 이 명령들은 다음 pull 명령 실행 전에 실행하면 된다.

  • merge 사용 : git config pull.rebase false
  • rebase 사용 : git config pull.rebase true 
  • fast-forward만 허용: git config pull.ff only
  • 또한, --global 옵션을 사용하면 모든 저장소에 대해 기본 설정을 변경할 수 있다.
  • 또는 명령줄에서 --rebase, --no-rebase, 또는 --ff-only 옵션을 사용하여 설정된 기본 설정을 무시하고 각 명령마다 재지정할 수도 있다.

 

a-1. git config pull.rebase false

merge를 사용하여 main 브랜치들의 commit을 내 브랜치로 통합하기로 결정했다. 

git config pull.rebase false  # merge 방식으로 브랜치 통합을 하는 설정을 한 후에
git pull upstream main        # 다시 upstream의 main을 pull하는 명령을 내린다.

 

그 뒤, 아래와 같은 화면이 떴다. 

 

대충 '브랜치 병합 작업' 이라고 메시지를 작성하고 Control + X 를 눌러서 에디터를 종료한 후에,

 

tab을 눌러 완료시켜준다. 

그 뒤, 바뀐 내용들을 내 작업 브랜치로 들어오게 된다.

 

  b. 충돌한 게 있다면 해결 

이번 작업은 다른 작업 브랜치들과 충돌되는 내용이 없어 a 단계에서 c 단계로 바로 건너 뛰었지만, 만약 충돌되는 내용이 있다면 merge editor을 사용하여 어떤 내용을 살릴 것인가 (팀원들과 합의된 내용) 결정한 후에 다시 pull을 해줘야 한다.

 

  c. pull 해온 commit들을 push 

'git push origin [내가 작업 중인 브랜치명]'

 

가져온 변경사항들을 origin의 내 작업 브랜치에도 push를 했다. 

 

이런 식으로 브랜치를 최신화시키고, upstream의 main 브랜치로 PR을 날리면 된다! 

 

PR까지 승인된 후의 결과 

 

upstream 레포지토리를 가보면,

  1. 내가 작업 브랜치에서 작업을 쭉 하다가 내가 맡은 작업을 완료한 후에,
  2. pull(fetch + merge)을 통해 upstream의 main 브랜치와 동기화 시킨 후,
    (내가 a 단계에서 쓴 '브랜치 병합 작업' 메시지도 보인다.)
  3. PR을 날렸고
  4. 해당 PR이 승인되어 upstream의 main 브랜치로 merge된 상황을 볼 수 있다. 

 

728x90
⬆︎