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

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

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

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

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

由于备份存在一些问题,我添加了-f标志,因为我现在运行了几次.

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

为了让这个改变到我的服务器,我错过了什么? (到位桶)

最佳答案 如果我正确理解您的问题,则无法推送到远程存储库,因为您的本地历史记录与远程历史记录不匹配.当您使用rebase或filter分支在本地更改命中提交时,通常会发生这种情况.

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

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

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

编辑:
你的同事有两个我知道的选择.它们可以是获取/重置路由或rebase路由.

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

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

点赞