2011-11-17 5 views
9

하나의 git repo를 3으로 분리했습니다. Detach (move) subdirectory into separate Git repository을 사용하여 폴더를 분리하고 새로운 git repos에 성공적으로 밀어 넣었습니다. 기존 repo에서 다음 명령을 사용하여 이동 된 디렉토리를 지 웠습니다. 내가 원래 REPO에 git st을 수행 할 때git push-git filter-branch가 거부되었습니다.

git filter-branch -f --index-filter "git rm -q -r -f --cached --ignore-unmatch lib/xxx/$REPO" --prune-empty HEAD 

지금, 내가 얻을 : 내가 git push하려고하면

# On branch 1.5.0 
nothing to commit (working directory clean) 

, 내가 얻을 :

! [rejected]  1.5.0 -> 1.5.0 (non-fast-forward) 
error: failed to push some refs to '[email protected]:/xxx/.git' 
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. 

내 생각 엔 -f를 사용하는 것입니다 : git push -f origin <branch> 하지만 기존 repo가 ​​수정 될 것이므로 확인하고 싶습니다.

답변

8

필터 분기를 사용하면 저장소가 리모컨과 다릅니다. 그래서 당신이 관찰 할 때, 원격은 이것에 대한 경고와 함께 푸시를 거부합니다. 이 경우 강제로 필터링 된 버전과 일치하도록 저장소를 강제 변경하여 강제 플래그로 밀어 넣을 수 있습니다. 이와 같이 게시 된 저장소를 변경해서는 안됩니다. 원한다면 할 수 있습니다. 클론을 가지고있는 사람이라면 누구에게나 알릴 필요가 있다는 것을 명심하십시오 - 그러나 다른 사람이 없다면 계속하십시오.

정말 조심하고 싶다면 - 이제 원본의 다른 복제본을 만드십시오. 그런 다음 밀어 붙이십시오. 무언가가 잘못 되었다면 백업 저장소에서 push --mirror을 사용하여 강제로 되돌릴 수 있습니다.

관련 문제