【问题标题】:Git remove only push last local commitgit remove 只推送最后一次本地提交
【发布时间】:2014-01-09 16:56:57
【问题描述】:

我对我不想丢失的 Rails 项目的本地 git 版本进行了大量更改,但是在这样做时,我不小心在 Git 中创建了一个 vendor/bundle 文件夹.

我一提交就意识到我这样做并为文件夹做了一个 git rm(并将文件夹添加到 gitignore),然后再次提交。但是,现在我无法推送原始文件,因为捆绑包太大了。

我需要什么

  • 如何保留所做的编辑(和新文件)。
  • 从 git 历史记录中删除 bundle 文件夹时
  • 由于目录太大,因此不与他们一起推送该提交

我一直在这里寻找各种软重置方法,但我被卡住了..

【问题讨论】:

    标签: git git-reset


    【解决方案1】:

    您可以执行git reset --soft HEAD~x,其中 x 是您要重置的评论数量 - 在您的情况下为 2,然后将目录添加到 gitignore 文件中,并将其从暂存区域中删除。

    【讨论】:

    • 我试过了(然后是我在这个线程上做出的答案),但由于该目录中的单个文件而被拒绝。继续挖掘。
    • 我最终不得不在本地提交中进一步返回,但这确实做到了。如果您的目录也在 git repos 中,我列出的另一个选项可能会起作用。
    【解决方案2】:

    我想我找到了答案:

    这种情况相当普遍。有人不小心犯了一个巨大的 带有轻率 git add . 的二进制文件,并且您想将其删除 到处。也许您不小心提交了一个包含 密码,并且您想让您的项目开源。过滤器分支 是您可能想要用来清理整个历史记录的工具。到 从您的整个历史记录中删除一个名为 passwords.txt 的文件,您可以 使用 --tree-filter 选项来过滤分支:

    Source

    git filter-branch --tree-filter 'rm -f /vendor/bundle' HEAD

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2012-05-30
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2021-08-12
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多