0

有几篇文章讨论了从 GIT 中删除文件或目录 - 但它们并没有解释如何将这些更改推送到主存储库中。

例如,可以很好地删除目录,但是当我尝试将此更改推送到主 Git 存储库时,我被拒绝:

! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '/repo/project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

将其实际推送到主仓库并实际删除该目录的最后一步是什么?

4

2 回答 2

2

当您如此激进地删除某些内容时,您会改写历史。因此,上游存储库拒绝您的更改,因为它会导致历史丢失。在这种情况下,您将需要使用

git push --force
于 2010-08-20T08:54:45.677 回答
1

尼克刘易斯的回答就足够了,但我只想强调一下,而不是放在评论中。git filter-branch这是手册页中的引用:

警告!重写的历史对于所有对象将具有不同的对象名称,并且不会与原始分支收敛。您将无法在原始分支之上轻松推送和分发重写的分支。如果您不知道完整的含义,请不要使用此命令,并且无论如何都要避免使用它,如果一个简单的单一提交就足以解决您的问题。git-rebase(1) (有关重写已发布历史的更多信息,请参阅中的“从上游 REBASE 恢复”部分。)

添加了斜体强调 - 这非常重要。Filter-branch 确实重写了历史,它会搞砸任何从你的仓库克隆/拉出的人,这很可怕。在尝试之前,您应该真正了解所有这些。这里的大多数人都非常擅长在推荐时提供该提醒filter-branchrebase;我认为在这里对它进行相当强烈的重复是合适的,因为答案是push --force为了完全重写你的公共回购中的历史。这是一个可怕的操作。

于 2010-08-20T14:46:50.310 回答