! [거부 됨] 마스터-> 마스터 (먼저 가져 오기)


104

! [rejected] master -> master (fetch first)'Git에서 " " 를 해결하는 방법을 설명하는 좋은 방법이 있습니까?

이 명령을 사용 $ git push origin master하면 오류 메시지가 표시됩니다.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

답변:


134

대답은 거기에 있습니다. git은 먼저 가져 오라고 말합니다.

아마도 다른 누군가가 이미 마스터하기 위해 밀어 붙였고 당신의 커밋은 뒤쳐져있을 것입니다. 따라서 변경 세트를 가져 와서 병합 한 다음 다시 푸시 할 수 있습니다.

그렇지 않은 경우 (또는 --force옵션 을 사용하여 강제하는 경우 ) 커밋 기록을 엉망으로 만들 수 있습니다.

편집 : 여기 한 사람이 --force옵션 사용에 대한 매우 나쁜 조언을했기 때문에 마지막 요점에 대해 자세히 설명합니다 .

git은 DVCS이므로 이상적으로는 다른 많은 개발자가 동일한 저장소 (또는 포크)를 사용하여 동일한 프로젝트에서 작업하고 있습니다. 변경 세트로 강제로 덮어 쓰면 "내역을 다시 썼기 때문에"저장소가 다른 사람의 저장소와 일치하지 않게됩니다. 당신은 다른 사람들을 불행하게 만들 것이고 저장소는 고통받을 것입니다. 아마도 세상의 새끼 고양이도 울 것입니다.

TL; DR

  1. 해결하려면 먼저 가져 와서 병합하십시오.
  2. 해킹하려면 --force옵션을 사용하십시오 .

하지만 당신은 전자를 요구했습니다. 1) 항상 git을 혼자서 사용하더라도 좋은 습관이기 때문입니다.


5
로컬 파일의 중요한 변경 사항을 가져 와서 삭제할 수 없습니까?
Leonardo Castro

2
가져 오기 후에도 변경되지 않습니다
dhein

@dhein 내가 쓴 것처럼, 가져 오기 후에 병합이 뒤따라야합니다. 요점은 로컬 트리를 원격 트리 (따라서 병합으로)와 "정렬"해야한다는 것입니다.하지만 감사합니다. 저는 TL에 작성했습니다. DR도
linuxbandit

90

시험:

git fetch origin master
git merge origin master

이 코드를 작성한 후 다른 오류가 발생했습니다. (빨리 감기가 아님)

이 코드를 작성합니다.

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

그리고 내 문제를 해결했습니다.


저도 마찬가지입니다. 그것은 내 문제를 해결했습니다. 몇 가지 경고가 있습니다. 나는 서브 저장소와 엉망,하지만 그것을 해결 : stackoverflow.com/questions/19584255/...
M. 솔레이에게

1
@Aurelio A 병합 명령이 올바르지 않습니다 git merge master..
mike

왜 git branch -D tmp를 사용해야합니까?
Милош Вељковић apr

27

을 사용해야 합니다 . 그 git pull명령은 do a를 git fetch하고 다음은 git merge.

git push origin master --force명령 을 사용 하면 향후 문제가 발생할 수 있습니다.


1
프로젝트에서 유일한 사람이고 첫 번째 푸시를 수행하는 데 좌절감을 느끼는 경우에만 --force를 사용해야하는 것이 맞습니까?
chrips

20

pull은 항상 올바른 접근 방식이지만 Git이 아닌 파일 시스템을 Github 저장소로 변환하려는 경우 한 가지 예외가있을 수 있습니다. 거기에서 첫 번째 커밋을 강제해야합니다.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

나를 위해 일하고, 나는 다시 새로운 프로젝트 (동일한 repo)를 시작했고 그것을 교체하고 싶었습니다.
ucotta

18

이 git 명령을 시도하십시오.

git push origin master --force

또는 힘 부족 -f

git push origin master -f


2
이것은 git push 제한을 재정의합니다. 팀워크에는 권장되지 않습니다. git push documentation에서 : 리베이스하는 동안 다른 사람이 원래 기록을 기반으로 빌드하면 원격 지점의 끝이 커밋과 함께 진행될 수 있으며 맹목적으로 --force로 푸시하면 작업 손실됩니다 .
케이시

10

오류 메시지에 명시된대로 "먼저 가져와야"합니다. 이것은 나를 위해 일했습니다. 다음 명령을 사용하십시오.

  1. git fetch origin master

그런 다음 병합하려면 다음 단계를 따르세요.

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master

4

이 명령을 사용하여 해결하십시오-

git push origin master --force

또는

 git push origin master -f

3

다음 명령을 사용할 수 있습니다. 먼저 --mirror 플래그를 사용하여 저장소의 새 복사본을 복제합니다.

$ git clone --mirror git://example.com/some-big-repo.git

그런 다음 그에 따라 코드를 따르십시오.

명령 줄을 사용하여 GitHub에 기존 프로젝트 추가

작동하지 않더라도 간단히 코딩 할 수 있습니다.

$ git push origin master --force 

또는

$ git push origin master -f

3

동일한 문제가 있었으므로 아래 단계를 따르십시오.

$ git pull origin master --allow-unrelated-histories 

(로컬 브랜치를 원격 브랜치와 쉽게 병합 할 수 있는지 확인하려면)

$ git push -u origin master 

(이제 로컬 git 저장소의 전체 콘텐츠를 온라인 저장소로 푸시)


2

다른 사람 (예 : 동료)이 origin/master로컬 master브랜치에 없는 커밋을했고 로컬 브랜치에서 서버로 커밋을 푸시하려고 할 수 있습니다. 99 %의 경우에서 작업을 지우고 싶지 않다고 가정하면 origin두 가지 옵션이 있습니다.

2) 변경 사항을 로컬 브랜치에 병합 한 다음 병합 된 결과를 푸시합니다. git checkout master git pull # resolve conflicts here git push

( 이 경우 git pull본질적으로 a git fetch와 a git merge입니다.)

1) 동료가 먼저 커밋을 한 다음 커밋 한 것처럼 보이도록 로컬 브랜치를 리베이스합니다. 이것은 커밋 히스토리를 멋지고 선형 적으로 유지하고 "병합 커밋"을 피합니다. 그러나 동료의 변경 사항과 충돌이있는 경우 최악의 경우 각 커밋에 대해 (단 한 번이 아닌) 이러한 충돌을 해결해야 할 수 있습니다. 본질적으로 이것은 다른 모든 사람들에게 더 좋지만 더 많은 노력을 기울입니다. git pull --rebase # resolve conflicts here git push

( git pull --rebase기본적으로 a git fetch및 a git rebase origin/master입니다.)



1

병합 분기로 인해 오류가 발생할 수 있습니다.
다음을 따르십시오.

1 단계 : git pull origin master(메시지를 받으면 무시하십시오)
2 git add .
단계 : 3 git commit -m 'your commit message'
단계 : 4 단계 :git push origin master


1

먼저을 사용 git pull하고 다음 명령을 수행 git fetch하고 다음으로 git merge를 수행해야합니다.

git push origin master --force명령 을 사용 하면 향후 문제가 발생할 수 있습니다.


1

나는 다음과 같은 새로운 브랜치를 체크 아웃함으로써 이것을 극복했습니다.

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

나중에 병합하도록 관리 할 수있는 Master 및 newbranch의 두 가지 분기가 남습니다.


0

원격 이름과 함께 브랜치 이름을 언급하기 만하면됩니다.

git fetch origin
git merge origin/master

0

제 경우에 발생한 이유는 GitHub rep 링크를 만들 때 README 파일로 초기화했습니다.

Git 원격을 만드는 동안 README 파일로 초기화하지 마십시오. 그렇지 않으면 오류가 표시됩니다.

그렇게하지 마십시오 & 그것은 확실히 잘 작동합니다 마스터 브랜치로 푸시 한 후 원한다면 readme 파일로 초기화하십시오.


0

다른 솔루션이 나를 위해 일하지 않았기 때문에 이것은 나를 위해 일했습니다. 힘조차도!

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line

Git Bash를 거쳐야만 했어

cd REPOSITORY-NAME
git add .
git commit -m "Resolved merge conflict by incorporating both suggestions."

그런 다음 내 cmd로 돌아 가면 할 수 있습니다. git push heroku master내 경우에는 문제였습니다.



0

여기에 이미지 설명 입력

! [거부 됨] 마스터-> 마스터 (먼저 가져 오기) 오류 : 일부 참조를 'git@github.com :'으로 푸시하지 못했습니다.

여기에 이미지 설명 입력

--force 명령을 사용하여 문제를 성공적으로 해결했습니다 . 따라서 git push origin master --force 를 사용해야합니다.



-1

나를위한이 일

  1. 자식 초기화

  2. git add --all

3.git commit -m "이름"

4.git push origin master --force


-1

이것은 나를 위해 일했습니다.

$ git add .
$ git commit -m "commit"
$ git push origin master --force

-1

문제 해결됨

내가 가진 문제

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

나도 같은 문제가 있었다. 문제는 commits다른 저장소에서 성공적으로 수행되지 않았 pushed으므로 다음 명령을 실행해야한다는 것입니다.

  1. git fetch origin master

    산출: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    산출: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    산출: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

정말 고맙습니다


-2

다음 명령을 사용하십시오.

git push -f origin master

그리고 그것은 당신의 일을 끝낼 것입니다

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