질문자 :Jason
내 Git 리포지토리에 두 개의 분기가 있습니다.
-
master
-
seotweaks
( 원래 master
에서 생성됨 )
master
로 빠르게 병합하려는 의도로 seotweaks
를 만들었습니다. 그러나 그것은 3개월 전의 일이고 이 분기의 코드는 master
보다 13 버전 앞선 것입니다.
의 코드 모든 그것은 효과적으로 우리의 작업 마스터 지점이되었다 master
지금은 다소되지 않습니다.
내가 아는 아주 나쁜 습관, 교훈을 얻었습니다.
master
브랜치 seotweaks
의 내용으로 대체하는 방법을 알고 있습니까?
master
에서 모든 것을 삭제하고 병합할 수 있지만 이것은 모범 사례처럼 느껴지지 않습니다.
"우리의" 병합 전략을 사용하여 다음과 같은 seotweaks로 마스터를 덮어쓸 수 있어야 합니다.
git checkout seotweaks git merge -s ours master git checkout master git merge seotweaks
결과는 당신의 주인이 이제 본질적으로 seotweaks입니다.
( -s ours
는 --strategy=ours
)
'우리의' 전략에 대한 문서 에서:
이렇게 하면 헤드 수에 관계없이 해결되지만 병합의 결과 트리는 항상 현재 분기 헤드의 트리이므로 다른 모든 분기의 모든 변경 사항을 효과적으로 무시합니다. 사이드 브랜치의 오래된 개발 이력을 대체하는 데 사용됩니다. 이것은 재귀적 병합 전략에 대한 -Xours 옵션과 다릅니다.
주석에서 업데이트: 치명적이 되면: refusing to merge unrelated histories
하고 두 번째 줄을 다음과 같이 변경합니다. git merge --allow-unrelated-histories -s ours master
ergosysgit branch -m을 사용하여 마스터 브랜치의 이름을 다른 브랜치로 변경한 다음, seotweaks 브랜치의 이름을 마스터로 변경하는 것은 어떻습니까? 이 같은:
git branch -m master old-master git branch -m seotweaks master git push -f origin master
이것은 오리진 마스터에서 커밋을 제거할 수 있습니다 . git push -f origin master
실행하기 전에 오리진 마스터를 확인하십시오.
ZelluX원격에서 마스터의 이름을 바꾸거나 제거할 수 있지만 많은 사람들이 원격 마스터 브랜치를 기반으로 작업하고 로컬 저장소에서 해당 브랜치를 가져온 경우 문제가 됩니다.
seotweaks
' 지점에서 작업하는 것 같기 때문에 여기에서는 그렇지 않을 수도 있습니다.
이 경우 다음을 수행할 수 있습니다.
git remote --show가 작동하지 않을 수 있습니다. ( git remote show
를 만들어 로컬 repo 내에서 원격이 어떻게 선언되었는지 확인합니다. 저는 ' origin
'을 가정하겠습니다.)
(GitHub에 대해 house9 은 다음과 같이 설명합니다. "한 단계를 추가로 수행 Admin
' 버튼을 Default Branch
master
'가 아닌 다른 것으로 설정한 다음 나중에 다시 넣어야 했습니다.")
git branch -m master master-old # rename master on local git push origin :master # delete master on remote git push origin master-old # create master-old on remote git checkout -b master seotweaks # create a new local master on top of seotweaks git push origin master # create master on remote
하지만 다시:
- 마스터가 원격에서 삭제되는 동안 다른 사용자가 풀을 시도하면 풀이 실패합니다("원격에 해당 참조 없음").
- 마스터가 원격에서 다시 생성되면 pull은 로컬(현재 오래된) 마스터에서 새 마스터를 병합하려고 시도합니다. 많은 충돌이 발생합니다. 그들은 실제로
reset --hard
그들의 로컬 마스터를 그들이 가져올 원격/마스터 브랜치로 재설정하고 현재 마스터를 잊어버려야 합니다.
VonCseotweaks
master
의 분기로 생성되었으므로 다시 병합하는 것이 좋습니다. 그러나 분기 중 하나가 실제로 master
의 분기가 아니거나 기록이 너무 달라서 작업을 수행한 새 분기를 위해 master
할 수 있습니다:
git push [-f] origin seotweaks:master
이 오류가 발생하는 경우 특히 유용합니다.
! [remote rejected] master (deletion of the current branch prohibited)
그리고 GitHub를 사용하지 않고 원격 저장소의 기본 분기를 변경하기 위해 "관리" 탭에 액세스할 수 없습니다. 또한 마스터를 삭제하면 발생할 수 있는 다운 타임이나 경쟁 조건이 발생하지 않습니다.
git push origin :master
mholm815이 작업을 수행하는 가장 좋은 방법인 것으로 나타났습니다(서버에서 삭제할 수 없는 문제가 발생했습니다).
origin
리포지토리를 호스팅하는 서버에서 리포지토리 내부의 디렉터리에서 다음을 입력합니다.
git config receive.denyDeleteCurrent ignore
워크스테이션에서:
git branch -m master vabandoned # Rename master on local git branch -m newBranch master # Locally rename branch newBranch to master git push origin :master # Delete the remote's master git push origin master:refs/heads/master # Push the new master to the remote git push origin abandoned:refs/heads/abandoned # Push the old master to the remote
origin
리포지토리를 호스팅하는 서버로 돌아갑니다.
git config receive.denyDeleteCurrent true
블로그 게시물 작성자에 대한 크레딧 http://www.mslinn.com/blog/?p=772
ScottGuymer출처 : http:www.stackoverflow.com/questions/2862590/how-to-replace-master-branch-in-git-entirely-from-another-branch