이 자식 경고를 처리하는 방법은 무엇입니까? “다양한 지점을 조정하는 방법을 지정하지 않고 가져 오는 것은 권장되지 않습니다.” #

git pull origin master다음 메시지가 나타납니다.

warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:

  git config pull.rebase false  # merge (the default strategy)
  git config pull.rebase true   # rebase
  git config pull.ff only       # fast-forward only

You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 51.49 KiB | 850.00 KiB/s, done.

그런 다음 풀이 성공적으로 완료되었습니다. 하지만 여전히이 메시지에 의문이 있습니다.
이 경우 가장 좋은 방법은 무엇입니까?



답변

기본 모드에서 git pull은 git fetch와 git merge FETCH_HEAD의 약자입니다.

당신이 작업을 수행 할 때 git pull origin master,
git pull종종 병합 커밋 만드는 병합을 수행합니다. 따라서 기본적으로 원격에서 가져 오는 것은 무해한 작업이 아닙니다. 이전에 존재하지 않았던 새로운 커밋 sha를 만들 수 있습니다. 이 동작은 사용자를 혼란스럽게 할 수 있습니다. 무해한 다운로드 작업이어야한다고 느끼는 것이 실제로는 예측할 수없는 방식으로 커밋 기록을 변경하기 때문입니다.

이를 방지하려면

git pull --ff-only

(아니면? 어떤 것이 당신의 필요에 맞는지 계속 읽으십시오)

를 사용 git pull --ff-only하면 Git은 새 커밋을 생성하지 않고 “빨리 감기”할 수있는 경우에만 브랜치를 업데이트합니다. 이 작업을 수행 할 수없는 경우 git pull --ff-only오류 메시지와 함께 중단됩니다.

--ff-only기본적 으로 항상 사용하도록 Git 클라이언트를 구성 할 수 있으므로 명령 줄 플래그를 잊어 버린 경우에도이 동작이 발생합니다.

git config --global pull.ff only

참고 : --global플래그는 시스템의 모든 저장소에 대한 변경 사항을 적용합니다. 현재있는 리포지토리에 대해서만이 동작을 원하면 플래그를 생략하십시오.

여기 에서 찍은


이 경고는 Joe가 답변에서 지적했듯이 Git 2.27에서 추가되었습니다.

완전한 경고는 다음과 같습니다.

분기 된 분기를 조정하는 방법을 지정하지 않고 당기는 것은 권장되지 않습니다. 다음 가져 오기 전에 다음 명령 중 하나를 실행하여이 메시지를

억제 할 수 있습니다. git config pull.rebase false # merge (기본 전략)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only

“git config”를 “git config –global”으로 대체하여 모든 저장소에 대한 기본 환경 설정을 설정할 수 있습니다. 명령 줄에서 –rebase, –no-rebase 또는 –ff-only를 전달하여 호출마다 구성된 기본값을 재정의 할 수도 있습니다.

경고는 세 가지 명령을 옵션으로 제공하며이 모든 명령은 경고를 표시하지 않습니다. 그러나 그들은 다른 목적으로 사용됩니다.

git config pull.rebase false     # merge (the default strategy)

이렇게하면 기본 동작이 유지되고 경고가 표시되지 않습니다.

git config pull.rebase true      # rebase

이것은 실제로 원격 분기 위에서 커밋하여 로컬 및 원격에서 단일 분기를 유지합니다 (하나는 로컬에 다른 분기는 원격에있는 기본 동작과는 달리 두 가지를 결합하기 위해 병합이 수행됨). ).

git config pull.ff only          # fast-forward only

이것은 로컬 브랜치를 빨리 감을 수있는 경우에만 풀을 수행합니다. 그렇지 않은 경우 오류 메시지와 함께 중단됩니다 (커밋을 생성하지 않음).


최신 정보:

당신이 경우 Git 2.29이상, 당신은 지금 설정할 수 있습니다 pull.fffalse, true또는 only경고를 제거 할 수 있습니다.

git config pull.ff true

true-이것이 기본 동작입니다. 풀은 가능하면 빨리 감기고 그렇지 않으면 병합됩니다.

git config pull.ff false

false -당기기는 절대 빨리 감기가 아니며 항상 병합이 생성됩니다.

git config pull.ff only

only -가능한 경우 당기기를 빨리 감습니다. 그렇지 않으면 오류 메시지와 함께 작업이 중단됩니다.


답변

이것은 Git 2.27에 추가 된 새로운 경고입니다 .

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.

에 대한 경고를 제거하려면 원하는 기본 동작으로 제안 된 값 중 하나를 설정 git pull하면 명령 줄에서 동작을 지정하지 않은 경우 (사용 --ff, --no-ff, --ff-only, --rebase). 모든 경우에 가능 git하면 빨리 감기 ( What is git fast-forwarding? ) 병합 을 시도 합니다. 설정은 분기에 변경 사항이 있지만 원격 분기에 없는 경우 발생하는 작업을 제어합니다 .

  git config pull.rebase false  # merge (the default strategy)

이것은 기존의 기본 동작입니다. 경고 및 동작의 변화가 없도록 설정하십시오. git원격 분기를 로컬 분기로 병합합니다.

  git config pull.rebase true   # rebase

여기에서는 git원격 분기 위에 변경 사항을 다시 적용하려고 시도합니다. git pull –rebase를 언제 사용해야합니까?를 참조하십시오 . 원하는 이유에 대한 자세한 내용은

  git config pull.ff only       # fast-forward only

빨리 감기 병합이 불가능한 경우 git진행을 거부합니다. 으로 자식 풀의 차이가 –rebase와 자식 풀 –ff 전용 인용 :

현재 HEAD가 이미 최신 상태이거나 병합이 빨리 감기로 해결 될 수없는 경우 0이 아닌 상태로 병합 및 종료를 거부합니다.


답변

git config pull.ff only 또는 동등하게 git pull --ff-only 하게 가장 안전한 것입니다. 그 이유는 리베이스가 히스토리를 덮어 쓸 수 있고 다른 개발자가 동일한 브랜치에 강제 푸시 한 경우 커밋이 손실 될 수 있기 때문입니다.

그러나 그들 모두는 유효합니다.


답변

참고 : 이전에 우리는 ” git pull( 남자 )를 가르쳤습니다. 에게 사용자가 기록을 병합, 다시 기반 또는 빨리 감기 만 허용 할 필요가 없다고 말하지 않고 경고가 pull.ff구성 변수를 설정 한 사용자에게 트리거 될 때 경고하도록 .

이것은 더 이상 사실이 아닙니다 (의미 : Git 2.29 (2020 년 4 분기) 에서는 더 더 이상 경고 없음 ).

Alex Henrie ( )의 commit 54200ce (2020 년 9 월 24 일)를 참조하십시오 . (Merged by Junio ​​C Hamano in commit 299deea , 29 Sep 2020)alexhenrie
gitster

pull: pull.ff설정된 경우 경고하지 않음

서명자 : Alex Henrie

설정을 충분히 이해 한 사용자 pull.ff는 추가 지침이 필요하지 않습니다.


Git 2.31 (Q1 2021) 이전에 사용자가 ” git pull( man ) 에게 rebase 또는 merge를 사용 하라고 말하지 않으면 이 명령은 사용자에게 rebase 또는 merge 중에서 선택하라는 큰 메시지를 제공하지만 어쨌든 병합을 생성하여 작업을 다시 실행하기 위해 rebase를 원합니다.

메시지를 제공하는 조건을 강화하여이 문제의 초기 부분을 수정합니다. 기록이 빨리 감기면 사용자가 리베이스 또는 병합 중에서 선택하도록 중지하거나 강제 할 이유가 없습니다.

참조 7539fdc 커밋 , b044db9 커밋 에 의해 (2020년 12월 14일를) Junio C 하마노 ( gitster) .
참조 c525de3 커밋 , 278f4be 커밋 , 77a7ec6 커밋 에 의해 (2020년 12월 12일) 펠리페 콘트레라스를 ( felipec) .
(Merged by Junio ​​C gitsterHamano in commit d3fa84d , 06 Jan 2021)

pull: ff가 아닌 경우에만 기본 경고 표시

제안자 : Junio ​​C Hamano
서명자 : Felipe Contreras

당길 때마다 성가신 경고를 표시 할 필요가 없습니다. 빨리 감기가 아닌 경고 만 표시 할 수 있습니다.

현재 경고 테스트는 여전히 통과하지만 인수 또는 구성 때문이 아니라 모두 빨리 감기 때문입니다.

빨리 감기가 아닌 상황을 지금 테스트해야합니다.