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의 분기 이름이고 원격 저장소의 분기 이름입니다. 이 명령 쌍은 두 개의 속기를 사용합니다. :masternull local_ref는 null 분기를 원격 측으로 푸시하는 것을 의미 master합니다. 즉, 원격 분기를 삭제합니다. 없는 지점 이름 :은 지정된 이름의 로컬 지점을 동일한 이름의 원격 지점으로 푸시합니다. master이 상황에서는 짧습니다 master:master.