git push после отклонения git filter-branch - PullRequest
11 голосов
/ 17 ноября 2011

Я разделяю одно git-репо на 3. Я использовал Отделить (переместить) подкаталог в отдельный Git-репозиторий , чтобы отделить папку и успешно перенести их в новые git-репозитории.В существующем репо я использовал следующую команду для очистки перемещенных каталогов:

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

Теперь, когда я делаю git st в исходном репо, я получаю:

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

Когда я пытаюсь git push, я получаю:

 ! [rejected]        1.5.0 -> 1.5.0 (non-fast-forward)
error: failed to push some refs to 'git@github.com:/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>, но я хочу убедиться, что это будетизменить мой существующий репо.

1 Ответ

14 голосов
/ 17 ноября 2011

Использование ветки фильтра сделало ваш репозиторий отличным от удаленного.Так что, как вы заметили, пульт отклоняет ваш толчок с предупреждением об этом.В этом случае вы планируете принудительно изменить хранилище, чтобы оно соответствовало вашей отфильтрованной версии, чтобы вы могли пойти дальше и нажать с флагом форсировки.Вы не должны изменять опубликованные репозитории, как это - но вы можете, если хотите.Помните, что любой, у кого есть клон, нуждается в уведомлении, но если других нет, тогда продолжайте.

Если вы хотите быть очень осторожным, сделайте еще один клон оригинала.Тогда сделай свой толчок.Если что-то заканчивается не так - for всегда может принудительно вернуть его обратно, используя push --mirror из резервного хранилища.

...