2014-04-02 4 views
4

시나리오가 간단합니다. 주인에서 나는 myBranch이라는 지점을 가지고 있습니다. 항상 나는 후자에서 일하고있다. 수정을 한 후에는 myBranch의 로컬 복사본에서 변경 사항을 원격 지점 myBranch으로 푸시하고자합니다. 내가 이것을 시도 할 때마다 나는Git 푸시 분기 오류

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

그래서 내가 잘 실행 git pull 계속 다음과 같은 오류/경고 메시지를 얻을. 그런 다음 git push으로 다시 시도하면 동일한 오류 메시지가 나타납니다.

메시지의 의미와 해결 방법을 설명해 주시겠습니까? 나는 아주 새로운 자식이다.

답변

6

기본 푸시 동작을 변경해야합니다. 불만을 제기하는 지점은 master이며, 현재 작업하고있는 지점이 아닙니다. 기본적으로 Git은 push.defaultmatching으로 처리합니다. 즉, git push이라고 말하면 마다 분기가 시작됩니다. 불행히도, 대부분의 사람들은 모든 로컬 버전의 브랜치를 최신 버전으로 유지하지 않으므로 위의 오류가 발생합니다.

원격 저장소의 master 분기에 새 커밋이 있지만 로컬 버전 master에 해당 커밋이 없기 때문에 발생합니다. 당신이 누를 때 힘내 원격 버전 master 로컬 버전과 일치하도록 만들려고합니다. 로컬 버전이 여러 커밋에 뒤쳐져 있기 때문에, 이것은 빠른 업데이트가 아닙니다 ( 기록을 잃을 것입니다).

내가 일반적으로 사람들이 push.default 바로 upstream, simple, 또는 current 중 하나에 설정을 변경하는 것이 좋습니다

git config push.default upstream 
git config push.default simple 
git config push.default current 
당신은 그 차이에 대해 읽을 수 있습니다

그것을 git-config man 페이지 ("push.default"를 검색).

git help config 

가 설정되면, git push은 당신이있는 지점을 밀어되며,이 메시지는 멀리 갈 것입니다 : 당신은 또한 명령 행에서 볼 수 있습니다.

또한 git push --force을 사용하는 것에 대해 토론하는 경우 기본 푸시 설정을 변경해야만 문제를 해결할 수 있습니다. 역사를 잃을 수있는 좋은 방법입니다. 2.0에서 Git이 기본 동작을 변경하는 이유이기도합니다. 이미 완료해야한다고 생각합니다.

3

당신은 분기 myBranch 여전히, 그래서 특별히에만 해당 분기 밀어 할 말을해야

git push origin myBranch 

을 또는, 당신은 항상 당신이있어 분기를 밀어 구성 할 수 있습니다 기본적으로 :

git rebase origin/master master 
git push origin master 
1

그것을 : 그 후

git config push.default current 

는, 마스터 분기를 해결하기 위해 귀하의 지점이 git pull에 대해 잘 구성되지 않은 것처럼 보입니다. 경우 당신은 내가 git rebase을 사용하는 것이 좋습니다 것입니다 간단한 커밋의 무리 (더 병합 커밋 없음) 밀어 원하는 : 경우

git checkout master 
git rebase origin/master 
git push 

변경 사항이 커밋을 병합 포함하고 당신이 그것을 볼처럼 당신이 밀어 싶어 기록 (gitk --all) 할 수 있습니다

git checkout master 
git merge origin/master 
git push