거부 된 마스터-> 마스터 (빨리 감기)


218

프로젝트 (새 저장소의 모든 파일)를 푸시하려고합니다. 나는 단계를 따르지 만 푸시 git push -u origin master하면이 오류가 발생합니다.

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

이 오류가 여러 번 발생하여 어떻게해야할지 알 수 없습니다.


4
로컬 마스터에 원격에서 원하는 최신 변경 사항이 있다고 확신하는 경우 git push --force
IgorGanapolsky

34
git push --force <remote_repository>나를 위해 일했다.
분류기

@ 소터-하루 종일 같은 문제가 발생했습니다. 감사합니다. 그러나 처음에 문제가 발생한 이유와 수정이 작동 한 이유에 대한 설명은 제공하지 않습니다.
Padawan

1
@ pmr, OP가 "오류 메시지를 읽습니다"라는 메시지가 전혀 도움이되지 않는지 물어보십시오. 분명히, 오류 메시지는 나에게 메시지를 보내지 않았거나 자신의 게시물을 공표 한 다른 66 명과 마찬가지로 OP에 의미가 없었습니다. 비열한, 생각보다 더 멍청한 사람들은 전혀 도움이되지 않습니다.
Padawan

3
@Padawan 당신은 또한이 "비꼬고, 더 멍청한 사람"이이 질문에 대한 정답을 제공했으며 72 명 (아마도 당신을 포함하여)이 도움이되었다는 것을 알게 될 것입니다. 내 의견이 거만 해져서 유감이지만, 전문적인 맥락에서 저에게 그 질문을한다면 저의 첫 질문이었습니다. 때때로 오류 메시지를주의 깊게 읽으려면 잠시 멈추고 잠시 시간을내어 궁금해합니다. 나는 그 오류를 처음 보았을 때 나를 위해했다.
pmr

답변:


160

오류 메시지에 표시된 것처럼 : git pull시도하기 전에 git push. 현지 지점이 추적 지점과 동기화되지 않은 것 같습니다.

프로젝트 규칙 및 워크 플로에 따라 사용할 수도 있습니다 git pull --rebase.


1
이 자동 병합 README.md 자동 병합 실패를 보여줍니다. 충돌을 수정 한 다음 결과를 커밋하십시오.
Asantoya17

1
@ Asantoya17 원격 마스터에서 수행 된 변경 내용이 변경 내용과 충돌합니다. 파일을 검토하고 검토하십시오. 그런 다음 해결 결과를 커밋하십시오. 튜토리얼이나 책을 받거나 적어도 메시지를 읽으십시오.
pmr

1
풀이 란 무엇입니까? 리포지토리 웹 사이트에서 파일을 푸시하거나 파일을 가져 와서 다운로드 할 수 있습니까? (예 : Bit Bucket)
David Dimalanta

4
@AndrewS git push --force origin master. 인생에서 이런 종류의 문제가 두 번 이상 발생하면 프로젝트 워크 플로가 손상됩니다. 기능은 지점에서 개발하고 빨리 감기하지 않고 병합해야하며 기능이 "실패"한 경우 병합 커밋을 되돌려 야합니다 (기능을 마스터에 병합하기 전에 먼저 통합 지점에서 테스트 수행). Eclipse에 대해서는 전혀 모른다.
pmr

1
오류가보고하면 어떻게해야합니까 git pull origin trunk:master?
Andry

175

주의 사항 : 이것은 git을 권장하지 않습니다. 리모컨의 변경 사항을 덮어 씁니다. 로컬 변경 사항을 원격 마스터로 푸시해야한다는 것을 100 % 알고있는 경우에만이를 수행하십시오.

이 시도: git push -f origin master


47
아니요, 시도하지 마십시오. From git help push: "이로 인해 원격 저장소가 커밋을 잃을 수 있습니다.주의해서 사용하십시오."
jcsahnwaldt Reinstate Monica

7
확실히
이러지

14
이것은 나를 위해 일했습니다. github에 대한 유일한 커밋은 새로운 리포지토리로 만든 커밋이기 때문에 괜찮습니다. 프로젝트를 시작한 후에는 사용하지 않는 것이 좋습니다.
Matthew Moore

1
배달 목적으로 만들어진 리포지토리를 업데이트하려는 경우에 유용합니다 (원격 측에서 새로운 변경 사항 없음)
HiB

방금 커밋을하고 GitHub와 동기화 한 다음이 커밋에 다른 파일을 추가하기를 원했습니다. 그래서 로컬에서 undid, 위의 명령을 실행하여 GitHub에서 지우고 로컬에서 다시 커밋 한 다음 동기화했습니다. 이제 모두 좋아! 그 지점에 다른 커밋이 없다는 사실을 알고있었습니다.
zeMinimalist

18

이 명령은 나를 위해 잘 작동했습니다

git push -f origin master

3
이 명령을 사용하기 전에주의하십시오. 이 명령을 사용하면 과거 커밋을 모두 잃게됩니다.
twenk11k

하지 -f 평균 힘 푸시
maheshmnj

@maheshmnj 예!
테스트 사용자

15

방금이 오류가 발생했습니다.

로컬 git 리포지토리를 만든 후 github 리포지토리를 만들었으므로 github으로 푸시하기 전에 로컬 변경 사항을 수락해야했습니다. 이 경우 github 리포지토리를 생성 할 때 선택적 단계로 생성 된 readme 파일 만 변경되었습니다.

git pull https://github.com/*username*/*repository*.git master

저장소 URL은 프로젝트 github 페이지의 여기에서 가져옵니다.

여기에 이미지 설명을 입력하십시오

그런 다음 다시 초기화되었습니다 (필요하지 않을 수도 있음)

git init
git add .
git commit -m "update"

그런 다음 :

git push

3
이 답변은 실제 사례 시나리오를 반영합니다.
kta

9

나는 github에서 새로운 저장소를 만들었고 같은 문제가 있었지만 당기는 동안 문제가 있었기 때문에 이것이 나를 위해 일했다.

그러나 이것은 모든 코드를 망칠 수 있으므로 이미 많은 코드가있는 repos에서는 권장되지 않습니다.

git push origin master --force

이 답변은 이미 stackoverflow.com/a/16374574/1771479 이며, 권장하지 않습니다.
agold

9

경고:

' git pull'로 가는 것은 항상 해결책이 아니므로 조심하십시오. 저장소 히스토리를 의도적으로 변경 한 경우이 문제점 (Q에서 언급 된 문제)에 직면 할 수 있습니다. 이 경우 git은 기록 변경 사항을 원격 저장소의 새로운 변경 내용과 혼동합니다. 따라서 git push --force호출 git pull하면 의도적으로 기록에 대한 모든 변경 사항이 실행 취소되므로을 방문해야합니다 .


8

git pull도움 이 되지 않으면 변경 사항을 푸시 한 후 (A) 변경 사항 git commit --amend을 추가하는 데 사용한 것입니다 (B). 따라서 git은 히스토리를 잃을 수 있다고 생각합니다-A의 모든 변경 사항이 포함되어 있지만 B는 다른 커밋으로 해석됩니다.

             B
            /
        ---X---A

아무도 이후 A에 repo를 변경 하지 않으면 그렇게 할 수 있습니다 git push --force.

그러나 A다른 사람으로부터 변경이 발생한 경우 :

             B
            /
        ---X---A---C

그런 다음 개인 AB( C-> D)로 변경 한 것을 리베이스해야합니다 .

             B---D
            /
        ---X---A---C

또는 수동으로 문제를 해결하십시오. 아직 그렇게하는 방법을 생각하지 못했습니다.


7

이 명령을 사용하십시오 :

git pull --allow-unrelated-histories <nick name of repository> <branch name>

처럼:

git pull --allow-unrelated-histories origin master

이 오류는 프로젝트에 공통 조상이 없을 때 발생합니다.


7
git push -f origin master

brute force 사용 ;-) git에 repo를 만들기 전에 만든 로컬 폴더를 추가하려고 할 것입니다.


2
이를 포함한 모든 대답에는 경고가 표시되어야합니다.
D. Ben Knoble

1
나는 이것을 시도했고 GitHub에 많은 커밋이 필요했는데, 그것은 repo의 다른 로컬 클론에서 복원해야했습니다. 위험한.
Paflow

6

이것은 마스터에서 약간의 변경을 수행했기 때문에 프로젝트가 먼저 가져와야하기 때문입니다. 어쨌든 밀어 넣으려면 다음을 입력하여 무차별 대입을 사용할 수 있습니다.

git push -f origin master

먼저 변경 사항을 커밋하십시오.

git add .
git commit -m "Your commit message"


4

당신은해야합니다

git branch

출력이 다음과 같은 경우 :

* (no branch)
master

그런 다음

git checkout master

체크 아웃하면 커밋되지 않은 모든 변경 사항이 손실되므로 보류중인 커밋이 없는지 확인하십시오.


4

! [거부 됨] 마스터-> 마스터 (빨리 감기)

당황하지 마십시오. 이것은 매우 쉽게 고칠 수 있습니다. 풀을 발행하기 만하면 지점이 빨리 진행됩니다.

$ git pull myrepo 마스터

그런 다음 푸시를 다시 시도하면 모든 것이 정상입니다.

$ git push github 마스터


4

이것은 브랜치를 개발할 때 발생했으며 마스터 브랜치는 최신 업데이트가 아닙니다.

그래서 개발 브랜치에서 git push를 시도했을 때 그 오류가 발생했습니다.

마스터 브랜치, git pull로 전환 한 다음 다시 브랜치 및 git push를 개발하여 수정했습니다.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

개발 시스템 에서이 문제가 발생했습니다. dev분기 벌금을 추진했지만하여 master(동안 지점 준 git push온 될 때 보내고 dev지점)

! [rejected]        master -> master (non-fast-forward)

그래서 나는 시도했다 :

git checkout master
git pull

나에게 준 :

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

마스터 브랜치가 누락되어 .git/config추가 되었음을 알았습니다 .

[branch "master"]
    remote = origin
    merge = refs/heads/master

그 후 지점 git push에서도 잘 작동했습니다 dev.


2

내 리모컨이 로컬과 동기화되지 않아서 저에게 효과적이었습니다.

git pull --rebase

git pull다시 할 때 이미 최신 상태 여야하며 이제 원점으로 넘어갈 준비가 되었는지 확인하십시오.

이미 가지고 있다고 가정 git remote add origin remote repository URL

하다

`git push origin master`  

스크린 샷은 모든 것을 말합니다 여기에 이미지 설명을 입력하십시오

또는 당신은 이것을 할 수 있습니다

  1. 자식 숨김 (커밋되지 않은 작업을 임시로 저장)
  2. git pull (로컬 및 원격 동기화)
  3. git stash pop (커밋되지 않은 변경 사항을 되돌립니다)
  4. 자식 푸시

1

나는 문제와 동일했다. Git Totoise를 사용합니다. 마우스 오른쪽 버튼으로 클릭-> TotoiseGit-> 정리. 이제 Github로 푸시 할 수 있습니다. 나와 함께 잘 작동했습니다 : D


1

이는 마스터에 상충되는 변경 사항이 있기 때문입니다. 그리고 리포지토리 서버는 이러한 단어를 사용하여 말할 수 없으므로이 오류가 사용자를 위해 이러한 충돌을 처리하는 것이 아니기 때문에이 오류가 발생하므로 사용자가 직접 수행하도록 요청합니다. 같이 ?

1- git pull 이렇게하면 리포지토리의 코드가 사이트 마스터 코드와 병합됩니다. 그래서 갈등이 나타납니다.

2-이 매뉴얼 시멘트 충돌을 처리하십시오.

삼-

git push origin master

그리고 presto, 당신의 문제는 해결되었습니다.


0

이 문제를 해결할 수있는 유일한 것은 로컬 및 자식 저장소를 삭제하고 양쪽 끝에서 다시 동일하게 만드는 것입니다. 지금은 잘 작동합니다.


Dropbox에 항상 git repo의 백업을 유지합니다. 그렇게하면 로컬 저장소를 삭제할 필요가 없으며 상황이 발생할 때 Dropbox에서 관련 디렉토리를 복사하여 붙여 넣습니다.
IgorGanapolsky

0

heroku로 푸시하려고 할 때 누군가이 오류가 발생하면 다음과 같이 'origin'을 'heroku'로 바꾸십시오 : git push -f heroku master



0

Repo에 이름을 지정하는 동안 발생하는 일부 이름 오류로 인해 발생할 수도 있습니다. 위의 답변 중 하나라도 효과가 없다면.

해당 저장소를 삭제하고 새 저장소를 작성하고 다음 명령을 다시 시도하십시오.

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

원점 추가가 이미 존재하는 경우 다음을 대신 사용하십시오.

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