Git 푸시 실패,“비 빨리 전달 업데이트가 거부되었습니다.”


99

Git Online을 통해 GIT 리포지토리를 편집했습니다. 로컬 코드 변경 사항을 푸시하려고 시도한 후 오류가 발생했습니다.

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

이 문제를 어떻게 해결할 수 있습니까?


답변:


137

먼저 변경 사항을 가져옵니다.

git pull origin branch_name

1
그래도 문제가 해결되지 않으면 현재 작업중인 분기와 동일한 분기로 푸시하고 있는지 확인하십시오. "git status"로 어느 지점에 있는지 확인하십시오.
afilina

1
이 명령은 저에게 효과적 이었지만 알고 싶습니다 git pull. 리모컨은과 같으 origin므로 실제로 실행됩니다 git pull origin.. 모든 분기를 업데이트해야하지 않습니까?
Karlen Kishmiryan 2015

83

푸시하려는 경우 명령 줄에 --force를 추가하십시오. 예를 들어 사용 git push origin --force(명령 줄을 사용하는 다른 사용자로부터 훨씬 더 많은 지원을받을 수 있으므로 명령 줄을 권장합니다. SmartGit에서는 가능하지 않을 수도 있습니다.) 자세한 내용은 다음 사이트를 참조하십시오. http://help.github.com/ 리모컨 /


8
-힘은 문제를 해결하지만 잠재적으로 다른 사람에게 해를 끼칠 것입니다. 그것은 단지 많은 관리 (지식)와 함께 사용해야합니다
schoetbi

7
-1 왜냐하면 일반적으로 강요 하는 것은 끔찍한 생각 이기 때문 입니다.
joshin4colours

6
5 명이 @ joshin4colours에 -1을 주기로 동의했기 때문에 +1했습니다. 그러나 강제 푸시가 항상 최선의 아이디어는 아니지만 (git이 푸시를 거부함으로써 명확하게 알 수 있음) 100 % 나쁜 생각이라면 옵션이 존재하지 않을 것입니다. 여기서 Matt의 제안은 확실히 다른 사람들에게 유용 할 수 있습니다.
user1271772 apr

2
--force해당 분기를 사용하는 유일한 사람이라면을 자유롭게 사용하십시오 . 그래도 다른 개발자와 분기를 공유 할 때 문제가 발생합니다.
Robert Brisita

22

푸시하기 전에 rebase 옵션으로 git pull을 수행하십시오. 이렇게하면 온라인 (원본에서) 변경 사항을 가져와 로컬로 적용한 다음 그 위에 로컬 변경 사항을 추가합니다.

git pull --rebase

이제 원격으로 푸시 할 수 있습니다.

git push 

자세한 내용은 Git rebase 설명Chapter 3.6 Git 분기- 리베이스 를 참조하십시오 .


2
내 경우 git pull --rebase로 끝나는There is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

같은 오류가 발생했습니다 . 명령에 "--force" 만 추가 하면 작동합니다.

git push origin master --force

6
이것에 대한 결과가 있습니까?
jayunit100

8
다른 사람의 커밋을 잃는 것.
Giovanni Toraldo

1
나는 이것이 내가하고자하는 것과 정확히 일치 하는 이상한 상황이 있었다 . 방금 만든 원격 마스터 브랜치의 내용을 새로운 것으로 날려 버리는 것이다. 이것은 내 문제를 해결했습니다. 모든 사람을위한 솔루션은 아니지만 --force도움이 될 수 있습니다.
Brad

1
나는이 답변이 6 번의 투표를받을 가치가 없다고 생각합니다. 이것은 제공된 문제에 대한 유효한 해결책이지만 작성자는이 명령이 유용 할 주변 상황에 대해 좀 더 설명 할 수 있습니다. 그것은 가치가 쓰기 (--force의 기능) 이후는 언급 할만큼 가치 만약
에이든 Strydom

5

나는 같은 문제가 있었다.
그 이유는 내 지역 지점이 원격 지점에 대한 추적을 잃어 버렸기 때문입니다.

git branch branch_name --set-upstream-to=origin/branch_name
git pull

합병 갈등을 해결하고 밀어 붙일 수있었습니다.


원격 지점의 변화를 놓친 것 같습니다
OZMA

5

명령 에 --force-with-lease 를 추가 하면 작동합니다.

git push --force-with-lease

--force 는 원격 저장소를 로컬에있는 모든 것으로 무조건 덮어 쓰기 때문에 파괴적입니다. 그러나 --force-with-lease 는 다른 사람의 작업을 덮어 쓰지 않도록합니다.

여기에서 자세한 정보를 참조 하십시오 .


1

(One) Netbeans 7.1 솔루션 : 풀을 시도하십시오. 이것은 아마도 실패 할 것입니다. 이제 로그를 살펴보십시오 (일반적으로 IDE에 표시됨). 다음과 같은 내용이 하나 더 있습니다.

"이 파일로 인해 가져 오기 실패 :"

해당 파일을 검색하고 삭제하십시오 (이전에 백업하십시오). 일반적으로 .gitignore 파일이므로 코드를 삭제하지 않습니다. 푸시를 다시 실행하십시오. 이제 모든 것이 잘 작동합니다.


1

--rebase옵션을 사용하면 저에게 효과적이었습니다.

  • git pull <remote> <branch> --rebase

그런 다음 저장소로 푸시하십시오.

  • git push <remote> <branch>

git pull origin master --rebase

git push origin master


0

나는 같은 문제가 있었다. 나는 결심했다

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OP는 로컬 코드 변경을 추진하는 것에 대해 말합니다. checkout이러한 변경 사항을 덮어 쓰거나 최소한 푸시에 포함하지 않습니다.
trejder

0

이것이 나를 위해 일한 것입니다. 여기 git 문서 에서 찾을 수 있습니다.

원하는 지점에있는 경우 다음을 수행 할 수 있습니다.

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

동일한 문제가 발생하여 해결하려면 다음 git명령을 실행하십시오 .

  • git pull {url} --rebase
  • git push --set-upstream {url} master

먼저 github에 저장소를 만들어야합니다.


0

때로는 git에서 끌어 당기는 동안 HEAD가 분리됩니다. 다음 명령을 입력하여이를 확인할 수 있습니다.

git branch 
  • (HEAD 8790704에서 분리됨)

    석사

    나타나게 하다

지점으로 이동하여 각 지점에서 새로 가져 오는 것이 좋습니다.

git checkout develop

git pull origin develop

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