删除一个不应该提交到Git的文件

4

我做了一件不好的事情。

在进行一系列更改的过程中,我意识到一个意外的文件已经悄悄地出现在了一两个提交中。因为我直到后来才意识到这一点,所以包含该文件的提交现在已经被推送到了远程。我需要这些提交,但是我只想从中删除这个特定的文件。

当然,我需要做的是深入我的树的每一个角落(本地和远程),并消除那个文件。我尝试了使用 filter-branchfilter-tree 一些方法,但是当我尝试推送更改时,它们都被拒绝了。

我有哪些选择?我做错了什么?

谢谢。

更新

应max的要求,这是我在尝试推送时收到的消息:

$ git push origin develop
To git@codaset.com:robwilkerson/cakephp-polyclip-plugin.git
! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'git@codaset.com:robwilkerson/cakephp-polyclip-plugin.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about fast-forwards' section of 'git push --help' for details.

你能否在push尝试失败后添加错误消息?也许一个简单的push -f命令可以解决这个问题。 - max
3个回答

11

2
你是否在git push命令中添加了-f(force)标志?如果没有该标志,则无法覆盖“旧”的提交记录。
-f, --force
       Usually, the command refuses to update a remote ref that is not an
       ancestor of the local ref used to overwrite it. This flag disables
       the check. This can cause the remote repository to lose commits;
       use it with care.

如果其他人已经从这些仓库拉取代码,那么情况可能会变得混乱。


让我详细说明一下,如果您强制推送,可能会发生以下几种情况:1. 在您筛选后(由其他人在远程端完成)进行的任何提交都将被销毁。2. 从该分支创建的任何分支将无法正确合并。3. 人们必须干净地检出分支,否则他们会遇到错误(对于最后一个问题不太确定)。 - Not Available
你知道吗,我觉得我从来没有尝试过那个。我知道我强制了过滤器,但可能没有强制推送本身。我会尝试一下。谢谢。 - Rob Wilkerson
所以在一个分支上强制推送有所帮助,但是同一个文件在另一个分支的不同目录(重构)中存在。当我尝试在另一个分支上执行相同的命令时,它会说路径规范与任何内容都不匹配。 - Rob Wilkerson
明白了。不确定发生了什么,但经过一些调试,文件似乎已经不存在了。谢谢。 - Rob Wilkerson

0

你可以直接实现修复,例如删除文件并将修复提交到代码库中。

这样,当其他分支与你的版本同步时,修复就会自动传播到每个分支。


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