2011-04-14 5 views
10

원격 저장소가 있고 로컬 저장소가 있습니다. 변경 사항을 로컬에서 수행 할 때마다 리모컨으로 푸시합니다. 그런 다음 원격 파일에 변경 사항을 저장하기 위해 "git commit"을 수행합니다."오류 : 일부 REF를 푸시하지 못했습니다"라는 메시지가 나타나는 이유는 무엇입니까?

원격 저장소를 전혀 편집하지 않습니다. 나는 변화를 저질렀다. 그리고 저는 단 하나의 개발자입니다. 아무도 그 리포지토리에서 일하지 않습니다.

왜 내가 아는 바로는 내가 먼저 당겨야한다는 의미의 오류가 발생합니까?

원격 저장소 파일이 오래되어 로컬 변경 사항이 손실 될 수 있기 때문에 당기고 싶지 않습니다. 이것은 정말로 성가신 일입니다. 왜 이런 일이 생깁니 까? 그리고 저장소를 가져 오거나 다시 만들지 않고 어떻게 해결할 수 있습니까?

EDIT (당신이 볼 수 있듯이,이 종류의 현재 버전 컨트롤 스타일의 파괴 유형처럼) - 오류 :

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

원격 저장소에서 "git commit"을한다는 것은 무엇을 의미합니까? 원격 저장소가 맨 왼쪽 저장소입니까? 당신은 일반적으로 베어 레포로 밀고 있어야하지만 베어 레포를 할 수는 없으므로 당신이하려는 일에 대해 약간 혼란 스럽습니다. 실행중인 실제 명령과 얻는 실제 결과의 예를 보여줄 수 있습니까? –

+0

글쎄, 나는 그 부분에 대해 조금 의심 스러웠다. 그래서 나는 그것을 언급했다. repos는 'git init'으로 생성됩니다. 그렇지 않으면 그 저장소에 변경 사항이 표시되지 않기 때문에 원격 저장소에서 커밋을 수행합니다. – Spyros

답변

11

당신이 베어 저장소로 원격 저장소를 만드는 일을해야 . 벌거 벗은 저장소는 현재 체크 아웃하지 않고 git repo 일뿐입니다 (즉, 정규 Git 저장소의 .git 디렉토리의 내용과 같으므로 개체와 참조가 포함되어 있지만 색인이나 작업이 없습니다 파일 계층 구조의 사본). non-bare 저장소로 푸시하려고하면 작업 복사본이 커밋 된 것과 동기화되지 않고 여기에서보고있는 문제의 원인이됩니다.

git init --bare repo.git을 사용하여 맨손 저장소를 만들 수 있습니다. 또는 기존 저장소를 git clone --bare original-repo new-repo.git을 사용하여 베어 레포로 복제 할 수 있습니다.

서버에 리포지토리의 체크 아웃 된 사본을 저장하려면 서버에 새로운 베어 메신저를 만든 다음 푸시 한 맨손 저장소에서 해당 저장소를 가져와야합니다 .

+0

오류를 표시하는 코드를 추가합니다. 올바르게 이해하면 맨발 저장소는 저장된 데이터를 나타내는 내부 방법이있는 인덱스와 같은 것으로 생각한 다음 작업 (또는 백업) 복사본을 복제하는 것입니다 . – Spyros

+0

+1 벌거 벗은 자식 저장소로 이동해야합니다. –

+1

@ SpyrosP 기본적으로.베어 리포 지 토리는 히스토리, 브랜치, 태그만을 저장하지만 특정 버전의 작업 카피를 가지고 있지는 않습니다. 맨손으로 repo를 복제하여 업무용 사본이있는 정상 repo를 만들 수 있습니다. –

6

이 항상 다음과 같은 현지의 repo와 원격 저장소를 동기화하지 않았기 때문에 먼저 명령 자식 풀을 사용하여 그들을 동기화해야한다는 것을 의미 :이 과정 후

git checkout master  
git pull origin master 

, 당신이 그들을 동기화합니다, 다음을 통해 원격 저장소로 변경 사항을 푸시 할 수 있습니다.

git add [filename/directory] 
git commit -m"input your message" 
git remote add origin https://github.com//yourname.git  
git push origin master 
5

다른 옵션이 있습니다.

git reset --mixed origin/master 
git add . 
git commit -m "Your message" 
git push origin master 
0

나는 다음과 같은 명령을 사용했다. git push --set-upstream origin master

관련 문제