【问题标题】:Remove a file from a previous unpushed commit从先前未推送的提交中删除文件
【发布时间】:2019-11-28 18:04:15
【问题描述】:

我不小心做了一个本地提交,其中包含一个我忘记添加到 .gitignore 的巨大 (~2GB) 文件。此提交还包含对其他文件的重要更改。然后我又做了一些不相关的本地提交。

我去push的时候,由于文件大小和相关问题,push最终失败了,这才意识到我不小心添加了那个文件。

是否有某种方法可以返回并从过去的提交中删除该文件(它是 4 次之前的提交,并且整个提交系列仍然未推送),就好像它从未存在一样?我仍然想保留有问题的提交中的其余更改。

【问题讨论】:

    标签: git language-agnostic git-commit git-push


    【解决方案1】:

    你可以使用 rebase -i 来做到这一点,但这是一个简单的修复方法:

    git checkout HEAD~4
    git rm --cached the-file
    git commit --amend --no-edit
    git cherry-pick the-branch~4..the-branch # replay all revisions after the revision we modified
    git branch -f the-branch # set branch to new location
    git checkout the-branch
    

    应该这样

    【讨论】:

      【解决方案2】:

      git rebase -i HEAD~5 如果过去 5 次提交中没有合并或插入适当的 sha。选择提交进行编辑。修改提交然后修改更改。 git rebase --continue

      【讨论】:

      • 我在做 rebase 时手脚冰凉,于是选择了其他解决方案;不过谢谢!
      • 可以理解。变基可能令人生畏。您始终可以创建一个新分支并将其弄乱,而不会影响您当前的分支。 git checkout -b foobar。如果一切正常,请删除旧分支并重命名 foobar。 git branch -D my_branch 然后git branch -m foobar my_branch
      猜你喜欢
      • 2016-12-16
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2019-07-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多