2011-11-17 20 views
9

Rozdzielam repozytorium git na 3. Użyłem Detach (move) subdirectory into separate Git repository do oddzielnego folderu i przekazałem je z powodzeniem do nowych repozytoriów git. W repozytorium istniejącego użyłem następującego polecenia, aby wyczyścić przeniesione katalogi.git push after git filter-branch rejected

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

Teraz, kiedy robię git st na oryginalnym repo, uzyskać:

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

Kiedy próbuję git push, otrzymuję:

! [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. 

Moje przypuszczenie jest użycie -f : git push -f origin <branch> , ale chcę się upewnić, ponieważ to zmieni moje istniejące repo.

Odpowiedz

8

Korzystanie z gałęzi filtra spowodowało, że twoje repozytorium różni się od zdalnego. Obserwując, pilot odrzuca twój nacisk, ostrzegając o tym. W tym przypadku planujesz wymusić zmianę repozytorium tak, aby pasował do Twojej przefiltrowanej wersji, abyś mógł kontynuować i naciskać flagą siły. Nie powinieneś zmieniać opublikowanych repozytoriów w ten sposób - ale możesz, jeśli chcesz. Pamiętaj, że każdy, kto ma klona, ​​potrzebuje powiadomienia - ale jeśli nie ma innych - to idź dalej.

Jeśli chcesz być naprawdę ostrożny - teraz możesz zrobić kolejny klon oryginału. Potem popchnij. Jeśli coś się nie uda - zawsze można go zmusić do odzyskania przy użyciu push --mirror z repozytorium kopii zapasowych.