【问题标题】:Remove a file from the list that will be committed从将要提交的列表中删除文件
【发布时间】:2011-04-03 15:17:38
【问题描述】:

我在 git 存储库中有一个已更改文件的列表。目前我不想提交一个文件。我能做到吗:

git commit -a

提交所有文件,然后以某种方式从当前提交中删除该文件?删除后,它仍应在未提交文件列表中。

【问题讨论】:

  • 您要删除您正在提交的文件,还是不提交您对该文件所做的更改?
  • @charles-bailey 我想将它添加到提交中,然后从中删除。
  • 那没有回答我的问题,至少我不确定你的意思。你说你“暂时不想承诺”。这是否意味着您只是不想在下一次提交中提交对文件的任何更改,或者您积极希望下一次提交删除文件,然后您将在后续提交中重新添加它?
  • @charles-bailey first:只是不想在下一次提交中提交对文件的任何更改。但我不想手动添加所有其他文件。所以我想添加所有这些。然后从下一次提交中删除一些文件。
  • 我发现这个问题在谷歌上搜索不同的问题......我认为标题有点误导,也许“忽略提交的文件”会更好(你还没有提交,所以你不要从提交中删除它,这是我需要做的!)

标签: git file commit


【解决方案1】:

你想这样做:

git add -u
git reset HEAD path/to/file
git commit

请务必从 repo 的顶层执行此操作; add -u 在当前目录中添加更改(递归)。

关键行告诉 git 将索引中给定路径的版本(提交的暂存区)重置为 HEAD 中的版本(当前签出的提交)。

并提前警告其他阅读此问题的人:add -u 暂存所有修改,但不添加未跟踪的文件。这与commit -a 所做的相同。如果您也想添加未跟踪的文件,请使用add . 递归添加所有内容

【讨论】:

  • 为了解决任何紧张的心理,这组命令不会改变你在磁盘上的实际代码文件,它只会从当前文件中取出指定的文件提交(这是最初要求的)。大起大落:)
  • 如果您知道不希望将它添加到提交中,您还应该编辑 .gitignore 并添加路径/到/文件
【解决方案2】:

也许您也可以使用 stash 将您的修改临时存储在补丁文件中,然后重新应用它(在结帐后返回旧版本)。这可能与其他主题有关:How would I extract a single file (or changes to a file) from a git stash?

【讨论】:

  • git stash 确实很方便,但在这种情况下使用它比reset HEAD <path> 复杂得多(不完全是它的设计目的)。无需打扰它或补丁。
  • @Jefromi 是的,您可能是对的,但了解替代方法总是有用的(并且链接的主题得到了很好的回答,所以......)。我也许应该在评论中给出链接...
【解决方案3】:

git rm --cached 将从提交集中删除它(“取消添加”它);这听起来像你想要的。

【讨论】:

  • 如果文件存在于 repo 中,则执行此命令然后提交将执行文件删除。
  • 这是这个问题的正确答案。最佳答案对我的问题没有帮助。我必须通过发出 git rm --cached <file> 从提交列表中删除该文件
  • 对我不起作用。当我执行 git diff 时,删除的文件不会出现。它会删除文件!
【解决方案4】:

使用存储;像这样:

git add .
git reset Files/I/Want/To/Keep
git stash --keep-index
git commit -a -m "Done!"
git stash pop

如果您不小心提交了一个文件,并且想要重写您的 git 历史记录,请使用:

git reset HEAD~1 path/to/file
git commit -a -m "rollback"
git rebase -i HEAD~2

并压缩到两个领先的提交。如果您有一组已知的不希望自动提交的文件,您可以编写一个帮助脚本来执行这些操作。

【讨论】:

    【解决方案5】:

    如果你已经推送了你的提交,那么。做

    git checkout origin/<remote-branch> <filename>
    git commit --amend
    

    如果你还没有在服务器上推送你可以使用的更改

    git reset --soft HEAD~1
    

    【讨论】:

      【解决方案6】:

      答案:

      git reset HEAD path/to/file
      

      【讨论】:

      • 根据对问题的评论,这看起来与 OP 实际想要做的事情不同。这个问题不是很清楚。
      【解决方案7】:

      您必须将该文件重置为原始状态并使用--amend 再次提交。使用git checkout HEAD^ 最容易做到这一点。

      准备演示:

      $ git init
      $ date >file-a
      $ date >file-b
      $ git add .
      $ git commit -m "Initial commit"
      $ date >file-a
      $ date >file-b
      $ git commit -a -m "the change which should only be file-a"
      

      之前的状态:

      $ git show --stat
      commit 4aa38f84e04d40a1cb40a5207ccd1a3cb3a4a317 (HEAD -> master)
      Date:   Wed Feb 7 17:24:45 2018 +0100
      
          the change which should only be file-a
      
       file-a | 2 +-
       file-b | 2 +-
       2 files changed, 2 insertions(+), 2 deletions(-)
      

      来了:恢复以前的版本

      $ git checkout HEAD^ file-b
      

      提交:

      $ git commit --amend file-b
      [master 9ef8b8b] the change which should only be file-a
       Date: Wed Feb 7 17:24:45 2018 +0100
       1 file changed, 1 insertion(+), 1 deletion(-)
      

      之后的状态:

      $ git show --stat
      commit 9ef8b8bab224c4d117f515fc9537255941b75885 (HEAD -> master)
      Date:   Wed Feb 7 17:24:45 2018 +0100
      
          the change which should only be file-a
      
       file-a | 2 +-
       1 file changed, 1 insertion(+), 1 deletion(-)
      

      【讨论】:

        【解决方案8】:

        这些答案中的大多数都是围绕从“暂存区”预提交中删除文件而传播的,但我经常发现自己在已经提交后查看这里并且我想从我刚刚提交的提交中删除一些敏感信息。

        对于像我这样的人git commit --amend 所有人来说,一个容易记住的技巧是你可以:

        1. 删除意外提交的文件。
        2. git add .将删除添加到“暂存区”
        3. git commit --amend 从上一次提交中删除文件。

        您会在提交消息中注意到不需要的文件现在丢失了。万岁! (提交 SHA 将发生更改,因此如果您已经将更改推送到远程,请小心。)

        【讨论】:

          【解决方案9】:

          如果您执行了 git add 并且尚未推送任何内容,则只需执行此操作即可将其从提交中取消暂存。

          git reset HEAD &lt;file&gt;

          【讨论】:

            猜你喜欢
            • 2013-10-19
            • 2011-08-15
            • 1970-01-01
            • 2016-04-17
            • 2012-09-10
            • 2013-09-17
            • 2021-09-23
            • 2021-12-31
            • 1970-01-01
            相关资源
            最近更新 更多