programing

이 Git 경고에 대처하려면 어떻게 해야 하나요?서로 다른 브랜치를 조정하는 방법을 지정하지 않고 당기는 것은 권장되지 않습니다.

batch 2023. 4. 16. 14:46
반응형

이 Git 경고에 대처하려면 어떻게 해야 하나요?서로 다른 브랜치를 조정하는 방법을 지정하지 않고 당기는 것은 권장되지 않습니다.

★★★★★★★★★★★★★★★ 이후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 FETH_HEAD가 이어집니다.

□□□□□을git pull origin master,
git pull는 머지를 실행합니다.대부분 머지 커밋이 생성됩니다.따라서 디폴트로는 리모트로부터의 풀은 무해한 조작이 아닙니다.이전에는 없었던 새로운 커밋 SHA 해시값을 작성할 수 있습니다.이 동작은 사용자를 혼란스럽게 할 수 있습니다.무해한 다운로드 조작이라고 생각되는 것은 실제로는 커밋 이력을 예측할 수 없는 방법으로 변경하기 때문입니다.

이를 피하기 위해

git pull --ff-only

(아니면요?요건에 맞는 것을 계속 읽어주세요)

★★★★★★★★★★★★★★★★ git pull --ff-onlyGit은 새로운 커밋을 작성하지 않고 "Fast Forward"할 수 있는 경우에만 브랜치를 갱신합니다.한 경우는, 「 」를 참조해 주세요.git pull --ff-only이치노

Git을 사용하도록 할 수 .--ff-only디폴트에서는 명령줄 플래그를 잊어버린 경우에도 다음 동작이 발생합니다.

git config --global pull.ff only

★★★★★★--global플래그를 지정하면 시스템의 모든 저장소에 변경 내용이 적용됩니다.현재 저장소에 대해서만 이 동작을 수행하려면 플래그를 생략하십시오.

여기서부터 가져가다



이 경고는 Git 2.27에 추가되었습니다.

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

서로 다른 가지를 조정하는 방법을 지정하지 않고 당기는 것은 권장되지 않습니다.풀 전에 중 하면 이 할 수 .

pullfalse # ( git config pull.rebase false # merge (마지)
pulltrue # git config pull.rebase true # 본 git git git 。
pullonly # only git config pull.ff # "forward"

"syslog config"를 "syslog 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

로컬 브런치를 고속 포워딩할 수 있는 경우에만 풀(pull)이 실행됩니다.그렇지 않으면 오류 메시지와 함께 중단됩니다(커밋은 생성되지 않습니다).


업데이트 1:

2. Git 2.29를 설정할 수 .pull.ff로로 합니다.false,true ★★★★★★★★★★★★★★★★★」only경고를 없애기 위해.

git config pull.ff true

true 동작입니다 - 이 동작입니다.가능한 경우 풀은 빨리 전달되고 그렇지 않으면 병합됩니다.

git config pull.ff false

false마르게 하다

git config pull.ff only

only한 한 않으면 이 중단됩니다 풀은 중단됩니다.」 「 」 「 」 「 」 「 」 「 」 「 」 。


2 ★★★★★★★★★
새로 에는 버전 「」까지 .2.35서 Git은 가 3개의 중 를 3개의 플래그로 에도 이 를 표시합니다.git pull명령어를 입력합니다.되었습니다. 이이 version version version version version your your your your your your your your your your your your 로 업데이트 해 주세요. Git git git git git git git git git git git git git git git git git 。2.36또는 그 이상입니다.


주의:

  • Torrek이 잘 쓴 이 답변을 읽고 이면에서 실제로 무슨 일이 벌어지는지 더 명확하게 파악하여 어떤 옵션이 당신에게 가장 적합한지 이해하십시오.

  • VonC답변에 주목하여 향후 업데이트 시 이 기능에 대한 변경 내용을 확인하시기 바랍니다.

이것은 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는 가능한 한 빨리 감기(git 빨리 감기란?) 병합을 시도합니다.이 설정은 브랜치에 변경이 있지만 리모트브런치에는 없는 경우의 동작을 제어합니다.

  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

경우 Fast Forward Marge를 사용합니다.git진행을 거부합니다.git pull --rebase와 git pull --ff-only 따옴표 사이의 차이:

현재 HEAD가 이미 최신 상태이거나 병합을 빨리 전달로 해결할 수 없는 경우를 제외하고 0이 아닌 상태로 병합 및 종료를 거부합니다.

다음을 수행합니다.

git config pull.ff only

일을 잘 할 수 있다는 걸 축하드립니다.

Git with Visual Studio(2019년 또는 2022년)를 사용하다가 이 문제가 발생하기 시작한 경우 Git 탭 -> 설정에서 이 옵션을 정의할 수 있습니다.

풀할 때 로컬 분기 기본 재배치

브랜치 변경을 '머지'하려면 false로 설정하고 변경을 '기본'하려면 True로 설정합니다.

VS 2019 - Git

난 괜찮아

git config --global pull.ff true

git config pull.ff only 동등하게 (동등하게)git pull --ff-only가장 안전합니다.그 이유는 다른 개발자가 같은 브랜치에 강제로 푸시한 경우 기본 재배치 이력을 덮어쓰거나 커밋 손실을 일으킬 수 있기 때문입니다.

하지만 모두 유효합니다.

git pull origin main --rebase

날 위해 일했다!

주의: 앞서 ""에서는 사용자가 이력을 Marge, Rebased 또는 Fast Forwarding만 허용해야 한다고 말하지 않을 때 경고하도록 git pull(man)가르쳤지만, 사용자가 이력을 Marge, Rebased 또는 Fast Forwarding만 허용하면 경고는 트리거됩니다.pull.ff설정 변수.

Git 2.29(Q4 2020)에서는 더 이상 경고가 발생하지 않습니다.

Alex Henrie()alexhenrie의 commit 54200ce(2020년 9월 24일)를 참조하십시오.
(2020년 9월 29일 Junio C Hamano에 의해 합병)

pull: 경고 안 함pull.ff되었습니다.

사인오프 바이: Alex Henrie

「」를 설정할 수 있을 만큼 하고 있는 .pull.ff에는 추가 지시가 필요하지 않습니다.


Git 2.31 (Q1 2021년) 이전에는 사용자가 ""에게 rebase 또는 merge를 사용하도록 git pull(man)지시하지 않을 경우 명령어는 사용자에게 rebase 또는 merge 중 하나를 선택하도록 지시하는 큰 메시지를 제공하지만, 어쨌든 merge를 생성하기 때문에 rebase를 원하는 사용자는 작업을 다시 하도록 강제한다.

이 문제의 초기 부분을 수정하기 위해 조건을 조여 메시지를 전달합니다.사용자는 이력이 빠른 경우 기본 재배치 또는 병합을 중지하거나 강제로 선택할 필요가 없습니다.

Junio C Hamano()gitster의 commit 7539fdc, commit b044db9(2020년 12월 14일)를 참조하십시오.
Felipe Contreras()felipec의 commit c525de3, commit 278f4be, commit 77a7ec6(2020년 12월 12일)을 참조하십시오.
(Junio C Hamano의해 병합 ----commit d3fa84d, 2021년 1월 6일)

:ff 이외의 경우에만 기본 경고를 표시합니다pull.

제안: 하마노 주니오
서명자: Felipe Contreras

당길 때마다 짜증나게 경고할 필요는 없어...빨리 감기 안 되는 것들만요.

현재 경고 테스트는 계속 통과하지만 인수나 설정에 의한 것이 아니라 모두 고속 전송이기 때문입니다.

지금 당장 비빠른 상황을 테스트해야 합니다.


경고는 With 2.34 (Q4 2021)로 변경되었습니다: git pull(man)" "는 그 주변에서 잘 고려되지 않은 다양한 코너 케이스를 가지고 있습니다.--rebase백엔드(예:git pull --ff-only(man) ")는 정지하지 않고 다른 쪽의 이력이 우리 이력의 후예가 아닌 경우에 재기초합니다.

아래도 참조해 주세요.Git 2.34는 아직 모든 것을 수정하지 않았다.

'commit 6f843a3, commit 359ff69, commit 031e2f7, commit adc27d6, commit e4dc25e(2021년 7월 22일)' 및 commit 1d25e5b, commit 19c5c(2021년 7월 21일) by Elia Newren()newren참조하십시오.
Alex alexhenrieHenrie의 commit 3d5fc24 ( 2021년 7월 21일)를 참조해 주세요.
(Junio C Hamano에 의해 병합 ---- 커밋 7d0daf3, 2021년 8월 30일)

: 패스트 포워딩이 불가능한 경우 디폴트로 중단됩니다pull.

초기 패치 기준: Alex Henrie
서명자: Eliza Newren

조정 경우 되었습니다.git pull.
지금 실수해 주세요.

git pull이제 man 페이지에 다음이 포함됩니다.

원격 저장소의 변경 사항을 현재 분기에 통합합니다.

  • 현재 브런치가 리모트 뒤에 있는 경우 디폴트로는 리모트에 일치하도록 현재 브런치를 고속으로 전송합니다.
  • 가 다른, 는 분산된 를 어떻게 .--no-ff,--ff , 「」--rebase 의 )pull.ff ★★★★★★★★★★★★★★★★★」pull.rebase를 참조해 주세요.

더 정확히 말하면, 좀좀 more more more more more more more more more more more.git pullgit fetch를 사용하여 또는 을 발신합니다.git merge ★★★★★★★★★★★★★★★★★」git rebase서로 다른 나뭇가지를 조화시키는 거죠.

(Git 2.33.1 이전)을 보는 대신:

서로 다른 가지를 조정하는 방법을 지정하지 않고 당기는 것은 권장되지 않습니다.
다음 풀 전에 다음 명령 중 하나를 실행하여 이 메시지를 스켈링할 수 있습니다.

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

다음과 같이 표시됩니다.

분기마다 다른 분기가 있으며 이를 조정하는 방법을 지정해야 합니다.
다음 풀 전에 다음 명령어 중 하나를 실행하면 됩니다.

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

, 다음 명령어 중 하나를 실행하지 않으면 치명적인 오류가 발생합니다.

fatal: Need to specify how to reconcile divergent branches.

Git 2.35 업데이트 (2022년 1분기)

Ark Kun 리포트:

Git 2.34입니다.현재 분기 헤드의 상위인 원격 분기의 풀링을 거부합니다.
은 아무것도 합니다.
VSCode에는 풀 및 푸시를 수행하는 동기화 기능이 있습니다.
이 기능은 GIT가 동작을 변경했기 때문에 몇 달 동안 고장났습니다.

다행히 이 문제는 GIT 마스터에서 해결되었습니다.

그것은 이 Git 메일링 스레드에서 보고/논의되어 수정이 진행 중입니다(git commit ea1954a).

Git 2.35(Q1 2022) 이전에는 상대방이 뒤처졌을 때 어떤 전략으로든 성공해야 하는데, 이는 git pull(man)노옵이기 때문에 성공하지 못했다.

Erwin Villejo()erwinvea1954a (2021년 11월 17일)를 참조하십시오.
(커밋 0f2140f, 2021년 11월 21일 Junio C Hamano에 의해 병합됨)

: 이미 최신 상태일 경우 noop이어야 합니다pull.

서명자: Erwin Villejo

풀 되었습니다.--ff-only ', 하다, 하다, 하다'의 경우는 포함되지 .--ff ★★★★★★★★★★★★★★★★★」--ff-only을 사용하다

" " " 가 됩니다.--ff-only의 하도록 수정하다--ff ★★★★★★★★★★★★★★★★★」--ff-only설정하다

이미 상기에 기재되어 있는 좋은 답변은 거의 없습니다만, 혼란스럽다고 생각되는 경우는, 이것을 시험해 주세요(경고:로컬 변경이 있는 경우는, 다음의 커맨드로 변경을 삭제합니다).

git reset --hard origin/<remote_branch_name>

예: 지점 이름이 마스터인 경우

git reset --hard origin/master

이 명령어는 로컬브런치 변경을 모두 폐기하고 로컬브런치를 리모트브런치와 동일하게 만듭니다.즉, 로컬브런치를 리모트브런치의 카본카피로 만듭니다.

git config pull.rebase false

merge(디폴트)전략)

제 경우, 이 작업은 다음과 같이 수행되었습니다.

git pull --rebase

지역 지사에서 원격 변경을 모두 받을 수 있었습니다.

감사해요.

예를 들어 develope 브랜치 및 develope 브랜치로부터A 브랜치로 풀하는 동안 분기 A를 1개 생성하여 이 다양한 문제를 발생시켰다고 합시다.develope에서 ur A 브랜치로 업데이트 코드를 가져올 수 없습니다.이 문제를 해결하려면 다음 단계를 따릅니다.

  1. git checkout develope-brnach (brnach 개발로 전환)
  2. git pull (모든 변경을 끌어당겨 전개합니다)
  3. git checkout A-feature-branch (기능 브랜치로 전환됩니다)
  4. git merge develope-marge (기능 브랜치에 대한 모든 변경을 Marge합니다)

이것으로 개발에서 현지 지사로 코드가 업데이트 되었습니다.잘 부탁드립니다:)

이 문제는 다음 명령으로 해결됩니다.

git config --global pull.ff true프로젝트 디렉토리 터미널에서 이 명령을 실행합니다.

이는 데스크탑을 통한 이상적인 솔루션입니다.Command Line Interface(CLI; 명령줄 인터페이스) 사용에 익숙하지 않은 사용자용.

GitHub Desktop 에서는 Ctrl + ' (리포지토리 메인 메뉴에서도 'Open in [Your set terminal]로 사용 가능)를 누를 수 있습니다.그러면 CLI가 열립니다.

[ Source Tree ]-> [ Actions ]-> [ Open in Terminal ]에서 선택합니다.프로젝트 디렉토리와 함께 터미널이 열립니다.SourceTree를 사용하여 터미널 열기

에 다음과 같이 git config --global pull.ff true(무엇보다)

이 설정을 풀하려고 하면 해당 설정이 사용되고 속행할 수 있게 됩니다.

가 제안했더니pull.ff true단순히 로컬 커밋을 적용하기 전에 리모트와의 최신 상태로 브랜치를 빠르게 전송하려고 하기 때문에, 그렇지 않으면 리모트에서 로컬 브랜치로 Marge를 실행합니다.여기서 문서를 읽어보세요.

일반적으로 브랜치를 풀하고 커밋을 추가한 후 푸시합니다.로컬이 리모트로 최신 상태라고 가정한 순서입니다.퍼스트 포워딩이 불가능할 때 머지하면 머지 커밋이 처리 방법을 알려줍니다.(다른 옵션은 기본 재배치 또는 항상 병합하는 것입니다. 많은 신규 사용자는 기본 재배치 작업이 직관적이지 않지만 실제로 동일한 작업을 수행합니다.)

는 가했 the the the를 추가했다.--global선택한 내용이 모든 저장소에 적용되고 이 오류 메시지가 다시 표시되지 않도록 플래그를 지정합니다.저장소마다 다른 동작을 원할 경우 이 항목을 생략합니다.

가장 안전한 옵션은 글로벌하게만 설정됩니다.실행:

git config --global pull.ff only

은 글로벌에 됩니다..gitconfig.

[pull]
    ff = only

는, 「」를 해 주세요.git pull --no-ff.

내 경우에는 이 방법이 효과가 있었다.

git rebase origin/my_remote_my_remote_name

git pull origin --rebase

날 위해 일했다!프로젝트 폴더에 수동으로 업로드한 파일을 가져오려고 했습니다.

이 문제는 2.34.1 Git 버전 업데이트로 해결되었습니다.

와, 여기 좋은 답변들이 많네요.하지만 경로의 원인에 대한 관점에서 대답하고 싶은데...

OP Route를 특정하는 것은 쉽지 않습니다.각자가 다를 수 있습니다.문제를 해결하는 것도 좋지만 처음부터 예방하는 것은 더 좋습니다.비록 나는 그들의 지식이 나보다 훨씬 크기 때문에 위의 답을 존중한다.

위와 같은 오류의 원인은 다음과 같습니다.

  1. 개발 브랜치에서 리모트 개발 브랜치로 커밋 및 푸시 풀 실행(VS 코드 사용)
  2. 그리고 우리 팀 지사의 홍보입니다.
  3. 그런 다음 GITHub 내에서 팀 브런치를 개발 브런치(상위)로 통합하고 Dev를 다른 팀과의 레벨로 끌어올려 모두 일치시킬 수 있도록 했습니다.
  4. 다음날 아침 새로운 커밋을 실시합니다만, 로컬의 VS Oce에서 Push/Pull을 실행하면 에러가 발생합니다.

리모트 머지 후 로컬로 풀 또는 Fetch Remote를 실행하여 변경을 진행하면 오류가 발생하지 않습니다.

그래서 매일의 일상이 바뀌어야 합니다.리모콘의 Dev에 Team을 Marge할 때는 Local로 바로 풀어야 합니다.

또한 새로운 커밋이 개발 브랜치에 병합된 내용과 충돌하는 다른 복합 요소도 있었습니다.따라서 풀하기 전에 변경을 삭제하거나 저장하라는 오류가 발생했습니다.

따라서 올바른 순서로 작업을 진행하면 처음부터 오류를 방지할 수 있었을 것입니다.(있을 수도 있습니다).

당신의 문제와 관련이 있는지는 모르겠지만, Git의 v2.34.0 버전에 문제가 있었습니다.git pull명령어에 필요한 동작이 없습니다.

Git 및 2021-11-24 새 버전에서 발생한 수정에 대한 릴리스 노트의 메시지:

상대방이 뒤처졌을 때 어떤 전략이든 성공해야 하는데, 실패하기 때문입니다.

Git v2.34.1 릴리즈 노트

저는 일단 설정을 하고 나서도 머지를 할 수 없었습니다.치명적이었습니다.빨리 전달할 수 없습니다. 중단합니다.

위의 솔루션 중 어느 것도 효과가 없었기 때문에 develope와의 Marge를 사용했습니다.merge origin/develope

제 경우, 다른 지점에서 인출하고 있었는데, 원하는 지점의 최신 업데이트만 하려고 했습니다.나뭇가지를 다시 바꾸면 정상으로 돌아옵니다.

즉, 로컬 마스터와 리모트마스터가 서로 다른 위치에 있다는 것을 의미합니다.즉, 둘 다 쉽게 포기할 수 없는 공헌을 하고 있습니다.로컬 커밋을 유지하려면 다음 절차를 수행합니다.

1. git switch -C feature_branch (from master, create local branch with your local commits)
2. git switch master
3. git reset --hard origin/master (lose all local changes, and become same as origin/master)
4. git switch feature_branch
5. git merge master (add remote changes to your local)
6. git push
7. Make a pull request for master.

요.--ff-only리모트 브런치와 동기화된 새로운 브런치를 작성했습니다.

다른 분기로 점프:

git checkout -b other-branch

번거롭지 않게 이름을 변경합니다.

git branch -m myBranch broken-myBranch

동기화하는 리모트브런치를 체크 아웃 합니다.

git checkout origin/myBranch

해당 로컬 브랜치를 만듭니다.

git checkout -b myBranch

리모트 브랜치를 접속합니다.

--set-upstream-to=origin/myBranch myBranch

제 경우 태그가 문제였습니다.이 문제는 다음과 같습니다.

git pull --tags -f

git용 UI를 가진 툴이 있으면 이 문제를 해결하기가 더 쉽습니다.IntelliJ를 사용합니다.다음은 사용자가 따라야 할 단계입니다.

  1. 코드를 Marge 하는 브랜치(마스터라고 합니다)에 체크 아웃 합니다.
  2. 최신 풀인 마스터(git pull origin master)를 사용합니다.
  3. 브런치 체크아웃(테스트라고 합니다)
  4. 에디터 우클릭 -> Git -> Merge로 이동합니다.
  5. 팝업에서 master branch를 선택합니다.병합을 클릭합니다.
  6. 충돌을 해결합니다(경합이 있는 경우).
  7. 테스트 브랜치에서 "git pull origin test"를 실행합니다.
  8. 테스트 브랜치에서 "git push origin test"를 실행합니다.

축하합니다!!!문제를 해결하셨군요.

제 경우 다음 방법으로 해결했습니다.

git pull --no-ff

이 명령어는 성공했습니다.

git pull --rebase
Successfully rebased and updated refs/heads/<branch>

답변은 이미 많이 있습니다만, 제가 다루는 방법은 지점 A에서 지점 B로 넘어가려고 하는 경우입니다.

  1. 먼저 A에서 pull request를 생성하여 master로 하겠습니다.
  2. 모든 충돌이 해결되었는지 확인하고 A을(를) 마스터에 병합합니다.
  3. 그 후 마스터에서 브랜치B로 끌어당기기만 하면 됩니다.

저는 좋아요.

git reset --hard origin/<remote_branch_name>

현재 있는 분기가 원격 저장소에 있는지 확인하십시오.Atlassian(BitbucketJira)을 사용하는 경우 풀 요청 후 지점이 삭제되어 다른 지점(마스터/개발)에 체크아웃하는 것을 잊어버렸을 수 있습니다.

언급URL : https://stackoverflow.com/questions/62653114/how-can-i-deal-with-this-git-warning-pulling-without-specifying-how-to-reconci

반응형