[git] 재설정을 원격 저장소에 강제로 푸시하는 방법은 무엇입니까?

원격 마스터 브랜치가 엉망이되었습니다. 현재 개발 코드는 최신 커밋과 함께 마스터 브랜치에 있습니다. 분명히 개발 코드는 마스터 브랜치에 대해 준비되지 않았습니다.

그래서 내 로컬 저장소에서 최신 태그 인 git reset --hard (Tag). 이제 마스터 브랜치가 내 로컬 저장소에서 정확합니다. 이제 변경 사항을 원격 저장소에 푸시하려고 git push origin master하면 오류가 발생합니다.

To (REMOTE GIT REPOSITORY LOCATION)
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
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.

그래서 주변을 둘러 본 후 --force옵션을 찾았습니다 . 그래서 원격 저장소에 강제 푸시를 git push --force origin master했지만 여전히 오류가 발생했습니다.

Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
 ! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'

마스터에있을 수없는 개발 코드가 포함되어 있기 때문에 마스터에 끌어 올 수 없습니다.



답변

이 메시지는 빨리 감기가 아닌 푸시를 할 수 없음을 의미합니다.

원격 저장소는 대부분 denyNonFastforwards = true구성에 있습니다. 그것을 변경 git push --force하면 작동합니다.

설정을 변경하려면 원격 저장소가있는 시스템에 액세스해야합니다. 거기에서 git config receive.denynonfastforwards false.


답변

리모컨은 빨리 감기를 허용하지 않습니다.

최선의 선택은 git revert거기에 있으면 안되고 앞으로 더 조심해야 할 모든 커밋입니다.

git revert [commit]무엇을 [commit]했는지 취소하는 새로운 커밋을 생성합니다 .


답변

다음 스타일에서 강제 푸시를 영구적으로 활성화하는 단계

git push -f myrepo my-branch

원격 저장소에서 “.git”로 끝나는 폴더에서 “config”라는 파일을 편집합니다.

푸시에 실패한 git의 명령 줄 출력에서 ​​다음과 같은 줄을 찾습니다.

error: failed to push some refs to 'ssh://user@some-remote-server.mycompany.com/srv/git/myrepo.git

그때

ssh user@some-remote-server.mycompany.com
cd /srv/git/myrepo.git
vi config

“denyNonFastforwards”를 false로 설정

“config”에서

[receive]
        denyNonFastforwards = false

이제 -f를 사용하여 로컬 머신에서 푸시 할 수 있습니다.

git push -f myrepo my-branch


답변

-f플래그를 사용하고 원격 브랜치 이름 뒤에 두십시오.

git push origin master -f


답변

빨리 감기가 아닌 git push를 할 수 없습니다.

  1. 원격이 GitHub 인 경우 해당 https://github.com/$USER/$REPO/settings/branches분기 로 이동하여 보호를 해제하십시오.

    여기에 이미지 설명 입력

    그렇게하려면 저장소의 관리자 여야합니다.

  2. 원격이 자신의 git 서버 인 경우 git config receive.denynonfastforwards false거기 에서 실행하십시오 .


답변

이 문제를 해결하는 가장 좋은 방법은 원격 분기를 삭제하고 다시 보내는 것입니다.

git push origin master --delete
git push origin master


답변

현재 분기가 PULL에 대해 올바르게 구성되지 않았기 때문에 문제가 발생합니다 . 먼저-를 사용하여 풀에 대해 업스트림 분기가 제대로 구성되었는지 확인합니다 git remote show origin. 섹션에서 찾을 수 있습니다- ‘git pull’에 대해 구성된 로컬 브랜치 : . 그렇지 않은 경우 다음을 사용하여 구성하십시오.

git config branch.MYBRANCH.merge refs/heads/MYBRANCH

자리 표시 자에 대한 적절한 지점 이름 제공 -MYBRANCH