2011-11-30 3 views
5

깨진 git push에 대한 몇 가지 설명을 읽었으나 그 중 어떤 것도이 문제를 다룰 수는 없습니다.충돌이없는 git push 오류

끌어서 놓은 후에도 내 로컬 변경 사항을 원격 저장소로 푸시 할 수 없습니다.

$ git pull 
Already up-to-date 

$ git st 
# On branch unstable 
nothing to commit (working directory clean) 

$ git push 
To ssh://<url> 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'ssh://<url>' 
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. 

<url>은 물론 내 저장소입니다

끌어 오기가 변경되지 않고 충돌이 발생하지 않으며 그 밖의 원인으로 인해 실패 할 수있는 원인이 있는지 잘 모르겠습니다.

나는이 올바르게 모든 설정있어 한 생각 : 과거

$ git remote -v 
origin ssh://<url> (fetch) 
origin ssh://<url> (push) 

$ git branch -v 
    master 175a09d [behind 18] openReview must now be called from thread other than main. 
* unstable c9e5cab Progress on attachments. 

가, 난 그냥 내 로컬 저장소를 삭제했습니다. 그러나 이것은 점점 더 자주 발생하고 있습니다.

  1. 이 문제의 원인은 무엇입니까?
  2. 앞으로 어떻게 피할 수 있습니까?
  3. 어떻게 해결해야합니까?

답변

4

전체 공개 - 내 자식은 녹슨 것이므로 100 % 정확하지 않을 수 있습니다.

로컬 '마스터'지점이 '원본'마스터 지점 뒤에있는 것으로 보입니다. 'git push'를 실행하면 모든 원격 브랜치를 해당 로컬 브랜치로 업데이트하려고합니다. 현재 브랜치를 푸시려면 git push origin unstable을 시도하십시오. 또한 로컬 마스터 브랜치를 최신으로 유지하려면 master 브랜치를 체크 아웃하고 git pull을 실행하십시오.

+0

이 답변은 정확합니다. 또한보십시오 : http://stackoverflow.com/a/8301464/156060 –

+0

당신 말이 맞아요. 문제는 마스터 브랜치 (master branch)입니다. 또한,'git pull --all'은'git push '의 진짜 대응 물입니까? –

1

기본적으로 로컬 기록이 원격 기록과 다르다고 불만을 토로합니다. 이는 브랜치를 재배치하거나 일반적으로 커밋 한 수정본 인 을 수정 한 경우에 수행합니다.을 푸시하면됩니다.

단지 중요한 비트가 있다는 것입니다

git push -f #Warning, this will essentially clobber revisions on origin with your local revisions. 

할, 그것을 해결하기 위해 "비 빨리 감기 업데이트가 거부되었습니다." 일반적으로 Git은 리비전을 원격 저장소로 복사하고 HEAD를 가장 최근의 개정판까지 끌어 올릴 수 있습니다. 그러나 기록이 다른 경우 (리모컨으로 푸시 한 후 로컬에서 개정판을 편집 한 경우) 앞으로 빨리 감을 수 없습니다.

+0

'push --force'가 최후의 수단이어야합니다. 대신 @ DanR의 대답을 참조하십시오. –

+0

+1의 경우 --force가 최후의 수단입니다. --force를 사용하는 경우는 거의 없습니다. --force는 나머지 사용자에게 심각한 부작용을줍니다. –

0

요즘 같은 문제가 있었는데 '빨리 감기가 아닌'업데이트를하려고합니다. git push --help을 입력하고 '빨리 감기에 대한 메모'를 읽으면서 도움말에서 읽을 수 있듯이 repo와는 다른 기록을 로컬에서 시작했습니다. 로컬 지사가 최신인지 확실하면 git push --force을 사용하여 강제로 밀어 넣기를 수행하여 원격 저장소를 로컬로 덮어 쓸 수 있습니다.

+0

'push --force'가 최후의 수단이어야합니다.대신 @ DanR의 대답을 참조하십시오. –