如何从本地和远程git仓库中删除文件

4

我希望我更了解git。

我的仓库里有一些项目配置文件,每次我们提交项目时都会与同事的冲突。不是很确定原因,但是由于它们制造的噪音,现在是时候从仓库中删除这些文件了。我无论如何也无法使它们正常工作。

在开始之前,我确保我的分支已经完全更新到远程仓库的最新状态。然后我使用了

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

由于备份出现了一些问题,我添加了-f标志,因为我已经运行了几次。

运行此命令似乎会从我的存储库中删除所有文件。然而,当我尝试将此更改推送到服务器时,它会出现错误,指出我的存储库比远程版本落后2个提交。建议我拉取,这会撤消上面的命令。

我缺少什么才能将此更改上传到我的服务器?(Bitbucket)

1个回答

3
如果我正确理解您的问题,那么您无法将更改推送到远程存储库,因为您的本地历史记录与远程历史记录不匹配。当您使用 rebasefilter branch 在本地更改提交时,通常会发生这种情况。
如果您将本地更改推送到远程,则会重写项目的某些或全部历史记录。这意味着您项目中的每个开发人员在尝试执行 git pull 时都会遇到问题,因为现在他们的本地历史记录与远程历史记录不同。在这种情况下,通常希望向共同开发人员发送有关此情况的消息,因为如果他们不知道您的 filter-branch 所做的内容,这可能会非常令人困惑并且耗时。
话虽如此,我认为您正在寻找 git push--force 选项。您需要运行 git push --force origin master。正如名称所示,这将用您的本地 git 历史记录覆盖远程存储库中的任何内容。
在执行此操作之前,请阅读文档并提出更多问题,因为这是一项具有潜在破坏性的操作。

编辑: 据我所知,你的同事有两个选项。他们可以选择使用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

所以,我告诉我的同事将他的版本与远程版本保持最新。然后,我使用--force选项覆盖了远程版本。然后他执行git pull命令来更新他的版本? - gdbj
我将一些文件添加到了我的.gitignore文件中,现在想将它们从这个仓库中删除。但是这证明是很复杂的。 - gdbj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接