【问题标题】:Remove file from amended commit从修改后的提交中删除文件
【发布时间】:2012-04-24 20:37:12
【问题描述】:

我将提交推送到我不小心添加了一个文件的仓库。没有其他人从远程仓库合并,所以我可以重写历史。但是当我从本地提交中删除文件(取消暂存,不从源代码管理或磁盘中删除)时,我无法推送更改。 git push 显示一切都是最新的

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    给你:

    git checkout HEAD~ -- path/to/your/file
    git add path/to/your/file
    git commit --amend -C HEAD
    

    git diff -p HEAD~ -- path/to/your/file | git apply -R
    git commit --amend -C HEAD
    

    git reset HEAD~ -- path/to/your/file
    git commit --amend -C HEAD
    

    【讨论】:

    • 我这样做了。问题是更改没有推送到远程仓库。
    • 注意:当提交元数据不需要保留时(通常情况下)-C HEAD可以替换为--no-edit
    • 下面两个错过了中间文件的添加
    【解决方案2】:

    试试:

    git rm --cached <yourfile>
    git commit --amend
    git push -f
    

    【讨论】:

    • 我不想从跟踪中删除文件,只是从提交中删除。
    • @sa1 在 git 中没有跟踪的概念,你的文件要么在你的最后一次提交中,要么不在,仅此而已。另一种选择是将文件留在那里,但不删除任何内容或部分。 Git 只是一个“文件系统专家”制作的“愚蠢的内容跟踪器”。 ;)
    • @KurzedMetal 有跟踪文件的概念。您在这里所做的是从跟踪文件中删除该文件,他要做的是删除提交中对文件所做的更改。
    • @ColinHebert 除了据报道强制推送不传达删除的问题,这可以以最简单的方式精确地完成原始发布者所要求的:取消暂存文件并修改提交。然后可以在以后的提交中添加该文件。
    【解决方案3】:

    如果需要重写完整的提交,尝试使用

    git reset HEAD^
    git add <files to be part of the commit>
    # or git add -pu
    git commit -C <previous commit number>
    

    在执行此操作之前,您需要保留最后一次提交编号,以便能够重复使用提交消息/日期/作者。

    【讨论】:

    • 我做了类似的事情。问题是我无法将这些更改推送到远程仓库。
    【解决方案4】:

    虽然我做了类似于 Colin 和 ydroneaud 建议的事情,但

    答案是使用

    git push +sa1:sa1
    

    sa1 是我的分支。这迫使甚至“什么都没有”。

    【讨论】:

      【解决方案5】:

      使用这两个命令,您可以立即将上次提交中对FILE 的所有更改恢复为,而不会更改其(工作树)内容:

      git reset HEAD~ "FILE"
      git commit --amend --no-edit
      

      根据https://superuser.com/a/567550的答案进行了简化

      请注意,这会将所有当前暂存的更改也添加到提交中,因此您可能需要事先运行 git restore --staged -- $(git rev-parse --git-dir)


      以前的解决方案来源于@ColinHebert 的回答

      git diff -p HEAD~ -- "FILE" | git apply --reverse --cached
      git commit --amend --no-edit
      

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 2012-09-10
        • 2013-09-17
        • 2022-12-23
        • 2021-09-23
        • 2021-08-02
        相关资源
        最近更新 更多