我将一个git repo分成3个。我已经使用Detach (move) subdirectory into separate Git repository分隔文件夹并将它们成功推送到新的git repos。在现有的 repo上,我使用以下命令清除了移动的目录。
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>
但我希望确保,因为这将修改我现有的回购。
答案 0 :(得分:13)
您对过滤器分支的使用使您的存储库与远程存储库不同。因此,当您观察时,遥控器会拒绝您的推送并发出警告。在这种情况下,您计划强制更改存储库以匹配已过滤的版本,以便您可以继续使用force标志。您不应该像这样更改已发布的存储库 - 但如果您愿意,也可以。请记住,任何拥有克隆的人都需要通知 - 但如果没有其他人 - 那就继续吧。
如果你想要非常小心 - 现在再做一个原版的克隆。然后你的推动。如果某些内容最终错误 - 因为总是可以使用备份存储库中的push --mirror
强制它。