Git 안전 기능이 보입니다. Git은 브랜치로 원격 브랜치를 업데이트하지 않습니다. 브랜치의 헤드 커밋은 푸시하려는 브랜치의 현재 헤드 커밋의 직접적인 후손이 아니기 때문입니다.
이것이 사실이 아니라면, 거의 같은 시간에 같은 저장소로 밀고있는 두 사람은 동시에 새로운 커밋이 들어 왔으며 마지막으로 밀린 사람은 이전 푸셔의 작업을 그들은 이것을 깨달았습니다.
당신이 밀고있는 유일한 사람이라는 것을 알고 있고 수정 된 커밋을 푸시하거나 브랜치를 되 돌리는 커밋을 푸시하려는 경우, -f
스위치 를 사용하여 Git이 원격 브랜치를 업데이트하도록 '강제'할 수 있습니다 .
git push -f origin master
원격 저장소가 구성 변수를 사용하여 맨 끝에서 비 빨리 푸시를 거부 할 수 있기 때문에 Git이 작동하지 않을 수도 있습니다 receive.denynonfastforwards
. 이 경우 거부 사유는 다음과 같습니다 ( '원격 거부 됨'부분 참고).
! [remote rejected] master -> master (non-fast forward)
이 문제를 해결하려면 원격 저장소의 구성을 변경하거나 더티 해킹으로 분기를 삭제하고 다시 만들 수 있습니다.
git push origin :master
git push origin master
일반적으로 마지막 매개 변수 git push
는 형식 을 사용합니다 <local_ref>:<remote_ref>
. 여기서 local_ref
로컬 저장소 remote_ref
의 분기 이름이고 원격 저장소의 분기 이름입니다. 이 명령 쌍은 두 개의 속기를 사용합니다. :master
null local_ref는 null 분기를 원격 측으로 푸시하는 것을 의미 master
합니다. 즉, 원격 분기를 삭제합니다. 없는 지점 이름 :
은 지정된 이름의 로컬 지점을 동일한 이름의 원격 지점으로 푸시합니다. master
이 상황에서는 짧습니다 master:master
.