GitHub를 처음 사용합니다 . 오늘 코드를 GitHub에 푸시하려고 할 때 문제가 발생했습니다.
Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
아직 저장소에 아무것도 넣지 않았으므로 왜 무언가를 가져와야합니까?
답변
이로 인해 원격 저장소가 커밋을 잃을 수 있습니다. 조심해서 사용하십시오.
원격 브랜치를 로컬 브랜치에 병합하지 않고 ( git diff 와의 차이점 참조 ) 강제 푸시를 수행하려면 push 명령을 -f와 함께 사용하십시오.
git push -f origin <branch>
어디에서 원격 저장소 origin
의 이름입니다 .
일반적으로이 명령은 덮어 쓰기에 사용 된 로컬 참조의 조상이 아닌 원격 참조 업데이트를 거부합니다. 이 플래그는 검사를 비활성화합니다. 이로 인해 원격 저장소가 커밋을 잃을 수 있습니다. 조심해서 사용하십시오.
답변
메시지에서 알 수 있듯이
원격 변경 사항 병합 (예 : ‘git pull’)
git pull
원격 저장소에서 로컬 저장소로 최신 변경 사항을 가져 오는 데 사용하십시오 . 이 경우 로컬 리포지토리를 변경 했으므로 변경 내용을 가져 오려면 병합이 필요합니다.
설명 할 예제와 그림을 제공하겠습니다. 출발지 / 지점에서 마지막으로 가져간 것이 커밋 B에 있다고 가정합니다. 일부 작업을 완료하고 커밋했습니다 (커밋 C). 동시에 다른 누군가가 작업을 완료하고 원산지 / 지점으로 옮겼습니다 (커밋 D). 이 두 가지간에 병합이 필요합니다.
local branch: --- Commit C / / / origin/branch: Commit A ------ Commit B ---- Commit D
푸시하려는 사람이기 때문에 Git은 강제로 병합을 수행합니다. 이렇게하려면 먼저 출발지 / 분기에서 변경 사항을 가져와야합니다.
local branch: --- Commit C -- Commit E / / / / / / origin/branch: Commit A ------ Commit B ---- Commit D
병합을 완료 한 후에는 변경 사항을 푸시하여 원산지 / 분기를 커밋 E로 빨리 감을 수 있습니다.
Git은 병합이 충돌을 일으킬 수 있으므로 병합을 직접 처리해야합니다.
답변
푸시하기 전에 코드를 업데이트 했습니까?
git pull origin master
아무것도 밀기 전에 사용하십시오 .
나는 당신이 origin
당신의 리모컨의 이름 으로 사용한다고 가정합니다 .
다른 사람이 이미 코드를 업데이트 한 경우를 대비하여 무언가를 푸시하기 전에 로컬 저장소를 최신 상태로 유지하려면 푸시하기 전에 가져와야합니다 github.com
. 이는 로컬에서 충돌을 해결하는 데 도움이됩니다.
답변
이것은 일반적으로 다른 누군가가 이미 변경 한 지점 에서 변경을 git commit
시도 할 때 발생합니다 .git push
git pulling
x
정상적인 흐름은 다음과 같습니다.
1 단계 : git stash
해당 지점에서 커밋되지 않은 로컬 변경 사항
2 단계 : git pull origin branch_name -v
에 pull and merge
해당 분기에 로컬로 최선을 다하고 변화 ( 이 병합에게 어떤 메시지를주고, 수정 충돌이있는 경우. )
3 단계 : ED 변경 ( 당신이 원하는 또는 첫번째) 커밋 변경 (STEP4 이미 밀어 나중에 파일에 커밋 새로운 만들 경우에 당신은 터진 파일에 커밋을 만들 수 있습니다. )git stash pop
stash
4 단계 : git push origin branch_name -v
병합 된 변경 사항
교체 branch_name
와 함께 master
(대한 master
지점).
답변
첫 번째 간단한 솔루션 (권장하지 않음)
- 이 명령을 사용해보십시오
git push -f origin master
. - 이 명령은 원격 저장소 (GitHub)를 강제로 덮어 씁니다.
권장 솔루션
- 다음 명령을 실행하십시오.
git pull --allow-unrelated-histories //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push
이것이 작동하지 않으면 ?를 따르십시오.
.git
폴더에서 디렉토리를 삭제 하십시오.-
그런 다음 다음 명령을 실행하십시오.
git init git add . git commit -m "First Commit" git remote add origin [url] git push -u origin master
또는
git push -f origin master
당신을 위해 작동하지 않는 git push -f origin master
경우 에만 사용 -u
하십시오.
이렇게하면 파일을 푸시하는 동안 발생하는 거의 모든 종류의 오류가 해결됩니다.
답변
때때로 우리는 당기기를 잊고 지역 환경에서 많은 일을했습니다.
누군가가 당기지 않고 밀고 싶다면
git push --force
작동합니다. 다른 사람과 함께 작업 할 때는 권장하지 않지만 작업이 간단한 일이거나 개인 장난감 프로젝트 인 경우 빠른 솔루션이됩니다.
답변
Git이 푸시하려는 브랜치를 모르기 때문에 일부 사용자에게이 오류가 발생할 수 있습니다.
오류 메시지에 다음이 포함 된 경우
error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.
그런 다음 Jim Kubicek의 편리한 팁 ( 현재 분기 만 푸시하도록 Git 구성 )을 따라 기본 분기를 현재로 설정하십시오.
git config --global push.default current