Git

[Git] git config pull.~~ warning 시 해결 방법, pull config 차이 예시

jimmy_AI 2024. 1. 29. 00:55
반응형

git pull 과정에서 config를 설정해야 하는 상황으로 pull이 안되는 경우

이를 해결하는 방법과 각 config에 따른 차이를 예시로 간략하게 정리해보도록 하겠습니다.

 

 

개요

git pull 과정에서 다음과 같은 warning 메시지가 발생하며, pull이 안되는 경우가 있습니다.

########################### W A R N I N G ############################
~~~
######################################################################
~~~
From git.projectbro.com:project_name/repo_name
 * branch            main        -> FETCH_HEAD
   abcdef..ghijkl  main        -> origin/main
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

 

 

해결 방법

현재 로컬과 원격 레포 간의 커밋 반영 상황이 다른 경우,

이를 동기화하는 방법이 여러 가지가 될 수 있지만

이 중 방법이 선택되지 않아 발생하는 warning 메시지입니다.

 

따라서, 아래의 세 가지 중 하나의 명령어로 방법을 선택해주신 뒤,

이후에 pull을 다시 진행해주시면 됩니다.

# 다음 중 한 가지로 pull 방법 선택
git config pull.rebase false
git config pull.rebase true
git config pull.ff only

# 이후 pull 진행
git pull origin main

 

반응형

 

git pull config 방법 차이 예시

위 세 가지 방법들 중 어느 방법을 골라야할지 난감하실 수 있습니다.

 

이해를 돕기 위하여 다음과 같은 상황을 가정해보도록 하겠습니다.

 

리모트 브랜치(Github or Gitlab): 커밋 A -> 커밋 B

로컬 레포지토리: 커밋 A -> 커밋 C

(즉, 커밋 A까지 반영된 상태에서 가져왔는데, 다른 곳에서 커밋 B가 있었고,

로컬에서는 동기화 없이 커밋 C를 만든 상황입니다.)

 

1. git config pull.rebase false (병합)

git pull을 실행하면, 리모트 레포의 커밋 B가 로컬 레포로 가져와집니다.

그리고 병합 커밋 D가 생성됩니다.

결과(로컬 기준): ACBD (D는 병합 커밋)

 

2. git config pull.rebase true (리베이스)

git pull을 실행하면, 로컬 레포의 커밋 C가 리모트 레포의 커밋 B 뒤로 재배치됩니다.

 

결과(로컬 기준): ABC' (C'는 리베이스된 새로운 커밋)

 

3. git config pull.ff only (fast-forward only)

이 설정으로는 git pull 실행이 불가능한 상황입니다.

이 경우는 현재 브랜치가 리모트 브랜치의 직접적인 부모 관계일 때만 가능합니다.

여기서는 B가 로컬에는 반영되어 있지 않은 상황이라 이 방식은 진행할 수 없습니다.