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.