git : 원격에 로컬에없는 작업이 포함되어있어 업데이트가 거부되었습니다.


113

저는 BitBucket에서 git을 사용하는 몇 명의 개발자로 구성된 팀에서 일하고 있습니다. 우리는 모두 dev브랜치에서 작업하고 master있으며 릴리스까지 추진하지 않습니다 .

개발자 중 한 명이 실수로 내 자신을 덮어 쓴 잘못된 코드를 저질렀 고 이제 올바른 코드를 repo로 다시 푸시하려고합니다. 나는이 오류에 대해 며칠 동안 읽었으며 다음 오류가 발생하기 때문에 더 이상 저장소로 푸시 할 수 없습니다.

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

및 지침을 따르지만 pull병합 충돌이 발생합니다. 병합 충돌에 대한 메시지를 입력 한 후 내 로컬 코드는 이제 다른 개발자가 실수로 업로드 한 잘못된 코드입니다 (에서 예상 한대로 pull). 따라서 잘못된 코드를 커밋하기 전에 복사 한 백업으로 대체하고 다시 푸시하려고하면 동일한 오류가 발생합니다.

정말 실망스럽고 팀을 돕고 기여하고 싶지만이 오류 때문에 할 수 없습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 도움을 주시면 감사하겠습니다.

누군가에게 도움이된다면 커밋하기 위해 실행하는 명령은 다음과 같습니다.

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

이 주문을 유지하면 병합 충돌이 발생하지 않을 것이라고 생각했을 것입니다. 내가 틀렸다고 생각합니다. 다시 한 번 감사합니다

업데이트 : 내가 다른 지침을 구글과 유래에 몇 시간 동안보고 및 준수했는지 추가해야합니다,하지만 난 아직 할 수없는 push받는 dev지점입니다.

답변:


42

git pull <remote> master:devremote/master브랜치 를 가져와 브랜치에 병합합니다 local/dev.

git pull <remote> devremote/dev분기 를 가져와 현재 분기에 병합합니다.

충돌하는 커밋이 on이라고 말한 것 같아서 remote/dev가져오고 병합하려는 분기 일 것입니다.

이 경우 실제로 충돌을 로컬 브랜치로 병합하지 않았습니다. 작업 복사본에서 잘못된 코드를 보았다고 말했기 때문에 다소 이상합니다. 에서 무슨 일이 일어나고 있는지 확인하고 싶을 수 있습니다 remote/master.


1
와 ... 그건 몰랐어요. 그러나 지금은 많은 의미가 있습니다. 마스터 브랜치도 잘못되었으므로 귀하의 답변은 내 모든 질문을 지 웁니다. 나는 여전히 git에 익숙하지 않습니다. 이 둘의 차이점을 알려 주셔서 감사합니다!
delos

6
나에게 가장 좋은 선택은 git pull --rebase.
derekmx271

152

터미널에서이 명령 사용

git push -f origin master


49
강제 푸시 (-f) 플래그를 사용하는 것은 매우 위험하며 정규 작업 흐름의 일부가되어서는 안됩니다.
Spaideri

5
이 답변에 몇 가지 경고가 누락 되었기 때문에 비추천했습니다.
Melebius

2
오! 이렇게하면 저장소가 자체적으로 다시 작성됩니다.
Azarsa

3
github에서 같은 오류가 발생했고이 명령으로 수정했습니다. @theeastcoastwest 왜 이것이 위험하다고 말하는 거죠? 당신의 이유는 무엇입니까 "
simon

3
@simon 원격에있는 작업을 무시하고 변경 사항을 repo에 강제하기 때문에 위험합니다. 따라서 팀의 작업을 엉망으로 만들고 싶지 않다면 강요하지 마십시오.
Gásten

42

원격 저장소로 푸시하려고하지만 아직 가져 오지 않은 새 파일을 원격 저장소에 만들었을 때 발생합니다 Readme. 이 경우 오류가 말했듯이

자식은 업데이트를 거부합니다

로컬 환경에서 원격으로 업데이트하지 않았기 때문입니다. 그러니 먼저 원격에서 당겨

git pull

로컬 저장소를 업데이트하고 새 Readme파일을 추가 합니다. 그런 다음 업데이트 된 변경 사항을 원격으로 푸시

git push origin master

나는 git pull origin develop지역 개발 브랜치에서 git pull일하고 있었지만 이제는 잘 작동 하지만 이유를 모르겠습니다.
Alex

기본적으로 해당 지역의 지점이 원격 지사와 동기화되는 경우 때문에 그냥 지점을 지정하지 않아도 해당 분기에 체크 아웃은 git pull충분하다
Himanshu

11

이는 일반적으로 저장소에 로컬에없는 일부 항목이 포함 된 경우 발생합니다. 따라서 변경 사항을 푸시하려면이 경우 원격 변경 사항을 통합 한 다음 푸시해야합니다.

따라서 원격에서 가져 오기를 만듭니다.

git pull origin master

그런 다음 변경 사항을 해당 리모컨으로 푸시합니다.

git push origin master


7

나는 그것을 고쳤고 내가 무엇을했는지 정확히 모르겠습니다. 나는 단순히 밀고 당기는 것을 시도했다.

git pull <remote> dev 대신에 git pull <remote> master:dev

동일한 문제가있는 경우 이것이 누군가에게 도움이되기를 바랍니다.


6

다음을 입력해야합니다.

$ git pull
$ git fetch 
$ git merge

를 사용 git push origin master --force하면 큰 문제가 발생합니다.


5
왜 사용해야합니까 git fetch하고 git merge다시 수동으로 실행 한 후 git pull어떤 을 포함 ?
Melebius

6

이것을 시도 할 수 있습니다. git pull origin master --rebase


2
안녕 에두아르도! 이것은 나를 위해 일했습니다. 그러나 그것이 작동하는 이유를 설명 할 수 있습니까? 이 명령은 정확히 무엇을합니까?
Akshaya Natarajan

4

실제로 github는 우리가 생각하는 것보다 훨씬 간단하며 git 저장소에 일부 파일을 명시 적으로 삽입 한 후에도 푸시를 시도 할 때마다 발생 하므로 문제를 해결하려면 간단히 시도해보십시오.

: git pull

그리고..

: git push

참고 : 저장소를 가져온 후 실수로 vim 편집기에서 멈춘 경우 vim 편집기를 닫고 푸시를 시도해도됩니다.


4

아래 단계를 수행했습니다. 마침내 잘 작동합니다.

단계

1) git init

2) 자식 상태 (상태 확인 용)

3) git add. (모든 변경 파일 (.) 추가)

4) 자식 커밋 -m "<pass your comment>"

5) git remote add origin "<pass your project clone url>"

6) git pull --allow-unrelated-histories "<pass your project clone url>"master

7) git push -u "<pass your project clone url>"master


2

이 오류는 서버에 업데이트가 있었지만 SourceTree가 사용 가능한 업데이트를 표시하지 않았기 때문입니다 (마지막으로 확인했을 때 오프라인 이었기 때문일 수 있음). 그래서 소스 트리에서 새로 고침을했는데 이제 푸시 할 항목 1 개 대신 2 개 항목이 표시됩니다.

따라서이 오류가 발생하면 새로 고침 을 누르 거나 당겨서 다시 시도하십시오.


1

git pull --rebase origin master

git push origin master


git push -f origin master

경고 git push -f origin master

  • 기존 저장소를 강제로 푸시하고 이전 저장소도 삭제하므로 이전 버전이 필요하지 않은 경우 도움이 될 수 있습니다.

1

커밋하고 GitHub에있는 코드의 구조가 다르기 때문에 오류가 발생할 수 있습니다. 다음을 참조 할 수 있습니다. " 관련없는 기록 병합 거부 "오류 처리 방법 :

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

1

나에게 가장 적합한 옵션이며 작동하고 간단합니다.

git pull --rebase

그때

git push

행운을 빕니다


1

이것이 내가이 문제를 해결 한 방법입니다.

  1. git pull origin master
  2. git push origin master

이는 일반적으로 원격 지점이 업데이트되지 않은 경우 발생합니다. 그리고 그 후 "커밋 메시지를 입력하십시오"와 같은 오류가 발생하면 이것을 참조하십시오 (저를 위해 xiaohu Wang 대답이 작동했습니다 :))


0

먼저 SSDT VS 프로젝트가있었습니다. 프로젝트를 Github로 푸시하고 싶었습니다. 이 푸시가 마스터 브랜치를 시작하는 내 저장소의 초기 버전이되기를 원했습니다. Donal의 git push -f origin master 제안은 이것을 수행하는 가장 쉬운 방법이었습니다. 재 작성에 대해 걱정할 필요가 없었기 때문에 말이되는 것 같았다.


0

나는 같은 문제가 있었다. .Readme 파일을 먼저 가져 오지 않고 저장소에 만들었습니다.

푸시하기 전에 .Readme 파일을 삭제하거나 끌어 올 수 있습니다.


나는 5 년 된 질문에 대한이 답변이 추가적인 가치를 제공하는지 확신하지 못하며 OP의 특정 문제에 대한 해결책을 제공하지 않습니다. 새로운 기여자이므로 질문에 답하는 방법에 대한 가이드를 참조하세요. stackoverflow.com/help/how-to-answer
Sotiris Koukios-Panopoulos

0

당신이 사용할 수있는

git pull --rebase <your_reponame> <your_branch>

이것은 로컬 저장소에 아직 등록되지 않은 일부 변경 사항이있는 경우에 도움이됩니다. 특히README.md

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