Git은 로컬 브랜치가 원격 브랜치 뒤에 있다고 말하지만 그렇지 않습니다.


83

대본:

  1. 나는 새로운 지점을 만든다
  2. 해킹 해
  3. 커밋
  4. 밀어
  5. 좀 더 해킹
  6. 다시 커밋
  7. 다시 밀려 고

힘내 응답 :

현재 분기의 팁이 원격 분기 뒤에 있기 때문에 업데이트가 거부되었습니다. 기타

이 지점을 해킹하는 유일한 사람은 나뿐입니다. 원격 분기는 실제로 로컬 분기 뒤에 있습니다. 나는 전혀 당길 필요가 없습니다.

(그리고 내가 당기면 Git은 둘 사이의 충돌을보고하고 분기를 자체로 병합하도록 강요합니다)

왜 이런 일이 일어날까요? 어떻게 진단 / 수정할 수 있습니까?

명확하게 말하면, 나는 아무데도 분기 하지 않고 다른 사람 이 작업 하지 않습니다 .

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

C는 B의 연속 된 연속이며 분기가 포함되지 않습니다. 그러나 git은 C가 A의 분기라고 생각합니다.

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

그렇지 않습니다. 그것은 B의 연속적인 연속입니다.


1
의 출력 git remote -vgit show remote origin도움이 될 수있다 (가정의 기원은 문제가있는 원격입니다)
벤 그레이엄

답변:


197

역사를 다시 쓰 셨나요? 로컬 지점이 서버의 지점과 분기되었습니다. 발생한 상황을 더 잘 이해하려면이 명령을 실행하십시오.

gitk HEAD @{u}

이 오류의 원인을 이해하려고 노력하는 것이 좋습니다. 이를 수정하려면 다음을 실행하십시오.

git push -f

이는 -f이를 "강제 푸시"로 만들고 서버의 분기를 덮어 씁니다 . 그것은 당신이 팀으로 일할 때 매우 위험합니다. 그러나 당신은 당신 자신이고 당신의 지역 주가 정확하다는 것을 확신하기 때문에 이것은 괜찮을 것입니다. 그렇지 않은 경우 커밋 기록을 잃을 위험이 있습니다.


13
그거였다. 2 단계에서 "Amend Last Commit"을 수행 한 다음 푸시 한 다음 더 해킹 한 다음 다시 푸시를 시도했습니다. Amend가 작동하는 방식을 오해했습니다. 감사!
Tim Janke 2012 년

4
이것은 정말 유용 해 보이지만 누군가 'HEAD @ {u}'구문을 설명 할 수 있습니까?
ChrisV

5
HEAD@{u}참조 는 모두 커밋을 나타냅니다. 표시 할 분기를 gitk에 알려줍니다. HEAD현재 체크 아웃 된 브랜치를 참조하고의 @{u}약자로 현재 체크 아웃 된 브랜치 HEAD@{u}의 업스트림 브랜치를 나타냅니다. 예를 들어. master, 일반적으로 origin/master.
Chronial dec. 06 '132013-12-06

같은 시나리오를 가지고 있었다-충돌을 재검색하고 병합해야했다. 사용하여 gitk많은 도움이!
brichins

로컬에서 간단한 커밋을 많이하고 (암정이 아님) 푸시하려고하면 나에게 발생합니다. 아무도 github에서 변경하지 않는다는 것을 알고 있습니다. 원격 로컬 다른 것처럼 gitk이 정말이 예상에도 불구하고, 그것은 (그 속에서 내가 말할 수있는 많은 gitk이 명령을 잘 모릅니다) 포크로 원격보다 최신 버전이 아닌 원격으로 지역을 표시해야했다
물병 전원

5

솔루션은 매우 간단하고 저에게 효과적이었습니다.

이 시도 :

git pull --rebase <url>

그때

git push -u origin master

4

이것은 개발 브랜치를 푸시하려고 할 때 발생했습니다 (git flow를 사용하고 있습니다). 누군가 마스터에게 업데이트를 푸시했습니다. 나는 그것을 고치기 위해 :

git co master
git pull

그 변경 사항을 가져 왔습니다. 그때,

git co develop
git pull

아무 짓도 안 했어요. 오류 메시지에도 불구하고 개발 분기가 이미 푸시되었다고 생각합니다. 모든 것이 현재 최신 상태이며 오류가 없습니다.


0

진단하려면 이 답변을 따르십시오 .

그러나 당신이 그것을 변경하는 유일한 하나 알고, 그것을 해결하기 위해 수행 :
1 - 백업 프로젝트 (내가 한 자식에 파일 만, ./src 폴더)
2 - git pull
3 - (많은 "엉망"파일을 통해 백업을 복원 병합 표시기 포함)

나는 시도 git pull -s recursive -X ours했지만 내가 원하는 방식으로 작동하지 않았습니다. 옵션이 될 수 있지만 먼저 백업하십시오!

차이점 / 변경 사항 (git gui에서)이 없는지 확인하십시오. 이것은 제 경우입니다. 병합 할 것이 전혀 없지만 github는 계속 병합해야한다고 말합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.