“Git push fast-fast-forward 업데이트가 거부되었습니다”는 무엇을 의미합니까?


153

Git을 사용하여 두 대의 컴퓨터와 개발을 관리하고 있습니다. GitHub에 변경 사항을 커밋하려고하는데 오류가 발생합니다.

일부 심판을로 푸시하지 못했습니다 <repo>. 기록을 잃지 않도록하기 위해 빨리 감기가 아닌 업데이트는 거부되었습니다. 다시 밀기 전에 원격 변경 사항을 병합하십시오.

이 문제의 원인은 무엇이고 어떻게 해결할 수 있습니까?

편집하다:

저장소를 당기면 다음이 반환됩니다.

* 브랜치 마스터-> 마스터 (빨리 감기) 이미 최신 상태

여전히 푸시하면 위에서 언급 한 오류가 발생합니다.


Git non-fast-forward rejected 도 참조하십시오 .

답변:


136

GitHub에는 ""빠른 전달 "오류 처리" 라는 멋진 섹션이 있습니다 .

이 오류는 처음에는 약간 압도적 일 수 있습니다. 두려워하지 마십시오.
간단히 말해서, git은 커밋을 잃지 않고 리모컨을 변경할 수 없으므로 푸시를 거부합니다 .
일반적으로 이것은 다른 사용자가 같은 지점으로 이동했기 때문에 발생합니다. 원격 브랜치를 가져오고 병합하거나 pull을 사용하여 한 번에 두 가지를 모두 수행하여이 문제를 해결할 수 있습니다.

다른 경우에이 에러와 같은 명령을 사용하여 국부적으로 이루어지는 파괴 변화의 결과 git commit --amendgit rebase.
당신은 추가하여 원격를 오버라이드 (override) 할 수도 있지만 --force받는 push명령이 당신이 원하는 것을 절대적으로 확신 할 경우에만 그렇게해야한다.
강제 푸쉬는 원격 브랜치를 가져온 다른 사용자에게 문제를 일으킬 수 있으며 나쁜 습관으로 간주됩니다. 확실하지 않은 경우 억지로 밀어 넣지 마십시오 .


Git은 Visual Git Reference가 다음 과 같이 빨리 감기 병합처럼 원격에서 변경할 수 없습니다 .

대체 텍스트

이것은 정확히 당신의 경우는 아니지만 "앞으로 빨리"가 무엇인지 ( HEAD지점의 지점이 새로운 최근 커밋으로 이동 한 경우) 확인하는 데 도움이됩니다 .


" branch master->master (non-fast-forward) Already-up-to-date"은 일반적으로 원격 상대방을 추적하지 않는 로컬 지점에 사용됩니다.
예를 들어이 git pull은 최신이지만 git push는 non-fast forward를 거부합니다 .
또는 두 가지가 연결되어 있지만, 각각의 역사를 가진 불일치에서 :
페이지의 " GIT의 이야기를 절대로 끝이없는 - 여기 무슨 일을하고 있는가? "

이는 서브 버전 브랜치와 원격 git 마스터 브랜치가 무언가에 동의하지 않음을 의미합니다.
일부 변경 사항이 다른 변경 사항이 아닌 다른 항목으로 푸시 / 커밋되었습니다.
gitk --all이 붙으면 무엇이 잘못되었는지에 대한 힌트를 얻을 수 있습니다. 역사에서 "포크"를 찾으십시오.


53

이는 커밋과 다른 원격 커밋으로 푸시 된 다른 커밋이 있음을 의미합니다. 당신은 일반적으로 이것을 해결할 수 있습니다

git pull

밀기 전에

궁극적으로 "빨리 감기"는 커밋을 병합하지 않고도 작업 트리의 맨 위에 직접 적용 할 수 있음을 의미합니다.


2
이것이 나를 위해 일한 것입니다! 리포지토리 사이트에서 readme.md를 변경 한 것을 잊었습니다!
ryanwinchester

14

빨리 감기 업데이트는 한 쪽이 다른 쪽에서 가장 최근의 커밋 이후에만 변경되는 부분이므로 병합 할 필요가 없습니다. 이것은 당신이 푸시하기 전에 변경 사항을 병합해야한다는 것을 의미합니다.


8

이 경우 푸시 작업에 힘을 사용하고 싶을 수도 있습니다.

자식 푸시 원점 마스터 --force


1
잘못 됐어 GitHub의 전체 소스는 삭제되고 삭제 만있는 거 새로운 소스 오래된 소스를 밀어 것
logeshpalani98

6

a는 않습니다 절대로 git -f할 수 없습니다 push나중에 비참한 결과를 초래할 수있다.

당신 git pull은 당신의 지역 지점 을 수행해야합니다 .

전의:

git pull origin 'your_local_branch'

그런 다음 git push


0

conflicts locally변경 사항을 원격 저장소 / 포크로 푸시하기 전에 를 병합하고 해결해야합니다 .

1) 당기기 (가져 오기 및 병합)

$ git pull remote branch 

2) 변경 사항을 푸시

$ git push remote branch 

여전히 옵션 push을 사용하여 강제로 빠르게 선택할 수 --force있지만 변경 내용이 손실되거나 다른 기고자에게 나쁜 영향을 줄 수 있으므로 피해야합니다.

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