如何从本地和远程的git repo中删除文件

时间:2015-10-14 05:26:32

标签: git local remote-access

我希望我能更好地了解git。

我的仓库中有一些项目设置文件,每次我们提交项目时都会与同事发生冲突。不完全确定原因,但是由于它们产生的噪音,这些文件已从回购中删除了。我无法通过这项工作来挽救我的生命。

在开始之前,我确保我的分支与遥控器完全一致。然后,我用了

 git filter-branch -f --index-filter \ 'git rm -r --cached --ignore-unmatch *.csproj' HEAD

由于备份存在问题,我添加了-f标记,因为我现在已经运行了几次。

运行此命令似乎从我的仓库中删除了所有文件。但是,当我尝试将此更改推送到服务器时,它会给出一个错误,说我的repo是远程版本后面的2个提交。它建议我拉,然后取消上面的命令。

将此更改发送到我的服务器上我错过了什么? (到位桶)

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,则无法推送到远程存储库,因为您的本地历史记录与远程历史记录不匹配。当您使用rebasefilter branch在本地更改匹配提交时,通常会发生这种情况。

如果将本地更改推送到远程,则会重写项目的部分或全部历史记录。这意味着项目中的每个开发人员在尝试git pull时都会遇到问题,因为现在他们的本地历史记录与远程历史记录不同。在这种情况下,您通常希望向您的共同开发人员发送有关此事件的消息,因为如果他们不知道您的filter-branch做了什么,这可能会非常混乱和耗时。

话虽如此,我相信您正在为--force寻找git push选项。您想要运行git push --force origin master。顾名思义,这将使用您的本地git历史记录覆盖远程中的任何内容。

请在执行此操作之前阅读the docs,如果您有任何问题,请提出更多问题,因为这可能具有破坏性。

编辑: 你的同事有两个我知道的选择。他们可以使用fetch/reset路线或rebase路线。

fetch/reset路由需要重置您的同事的本地存储库,使其与远程存储库完全相同。这可以通过以下方式完成:

git fetch origin && git checkout master
git reset --hard origin/master

rebase路由需要在新清理的主人之上应用您的同事的本地提交。在交互模式下,他们将有机会在包含它之前审核每个提交。如果提交包含您想要的文件,他们可以简单地省略它。这可以通过

完成

git fetch    git rebase -i origin / master

如果您同意您的存储库应该是规范的存储库,那么第一个选项会更好,因为它更快。第二种方法反过来为您提供更精细的控制。

你可以查看这个SO问题,解决强行推动后拉动的问题:git pull after forced update