git filter-branch拒绝后git push

时间:2011-11-17 09:50:21

标签: git git-filter-branch

我将一个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> 但我希望确保,因为这将修改我现有的回购。

1 个答案:

答案 0 :(得分:13)

您对过滤器分支的使用使您的存储库与远程存储库不同。因此,当您观察时,遥控器会拒绝您的推送并发出警告。在这种情况下,您计划强制更改存储库以匹配已过滤的版本,以便您可以继续使用force标志。您不应该像这样更改已发布的存储库 - 但如果您愿意,也可以。请记住,任何拥有克隆的人都需要通知 - 但如果没有其他人 - 那就继续吧。

如果你想要非常小心 - 现在再做一个原版的克隆。然后你的推动。如果某些内容最终错误 - 因为总是可以使用备份存储库中的push --mirror强制它。