2

我刚刚发现,在过去的提交中,我包含了不应该在存储库中的文件(.ideaWebstorm 文件和其他文件)。这个提交“位于中间”,在它之前和之后都有未推送的提交。此外,在此提交中是确实需要提交并且在以后(未推送)提交中进一步修改的文件。

我已经看到了这些答案:Completely remove file from all Git repository commit historyRemove files from Git commit但他们似乎没有回答我的具体问题。解决办法是什么?

4

2 回答 2

3

你的情况

我正在使用 3 个未推送的提交来创建您描述的情况:

$ git clone <url>
$ touch file1
$ git add file1
$ git commit -m "Correct 1st commit"
$ touch file2
$ touch webstormfile
$ git add .
$ git commit -m "Wrong 2nd commit with by mistake included WebStorm file"
$ touch file3
$ git add file3
$ git commit -m "Correct 3rd commit"
$ git log --oneline
$
$ ad73bfa Correct 3rd commit
$ eddae38 Wrong 2nd commit with by mistake included WebStorm file
$ ad219bf Correct 1st commit

删除提交的 WebStorm 文件

请注意:以下步骤将更改历史记录,这意味着,如果提交已被推送,更改历史记录将破坏所有团队成员的存储库。如果您还没有推送,您可以按照步骤操作,而不会打扰您的团队成员。

开始交互式变基,包括eddae38错误提交的哈希:

$ git rebase -i eddae38^

文本编辑器弹出以下内容:

pick eddae38 Wrong 2nd commit with by mistake included WebStorm file
pick ad73bfa Correct 3rd commit

# Rebase ad219bf..ad73bfa onto ad219bf
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

在第一行中,将pick更改为edit,保存文件并关闭文本编辑器。

注意力!如果想保留它,请复制您的 WebStorm 文件。然后,从提交中删除 WebStorm 文件:

$ git rm .\webstormfile

提交清理后的索引:

$ git commit --amend --no-edit

完成变基:

$ git rebase --continue
于 2015-02-22T17:38:46.523 回答
0

用另一个提交删除文件,然后git rebase -i在最后一个推送的提交上运行,并用删除文件的提交来压缩错误的提交

确保备份文件,因为您将需要它们。提交修复后,恢复文件并将它们添加到.gitignore以防止进一步提交

于 2013-10-28T07:38:12.717 回答