首页 > 解决方案 > 如何仅提交在 git 中跟踪的某些已修改文件?

问题描述

我的存储库中有几个正在跟踪的文件,但我想提交一个只包含其中几个的提交,而将其他文件保留为已修改。示例,假设我要进行包含更改的提交c.txt d.txt e.txt

    modified:   a.txt
    modified:   b.txt
    modified:   c.txt
    modified:   d.txt
    modified:   e.txt

这样我的下一个git status产量

    modified:   a.txt
    modified:   b.txt

必须有一个简单的方法来实现这一点。

标签: git

解决方案


我想做一个包含对 c.txt d.txt e.txt 的更改的提交

您误读git status并误解了 Git 本身的输出。

  • Git 提交不包含更改。它们是您整个项目的快照。

  • git status告诉两个不同的事情:工作树中修改了什么(Changes not staged for commit:),以及进入下一个提交的阶段(Changes to be committed:)。这两个列表文件都一样,modified但它们是完全不同的东西。

您通过索引添加到先前提交的内容以及(因此)现在索引中存在的内容来构建 Git 对项目构成的理解。一旦你提交了一个包含 c.txt 的快照,Git 就会跟踪c.txt。它不会停止跟踪它。如果您修改 c.txt,Git 会知道这一点,并会git statusChanges not staged for commit:.

但这并不意味着 Git 会在您下次提交时提交 c.txt 的当前状态只有将c.txt 的当前状态添加到索引中 Git 才会这样做。如果你不添加它,Git 将不会提交它。如果您添加它,使其显示在 下Changes to be committed:,并且您希望没有添加,请使用git restore,按照git status告诉您的操作。


推荐阅读