如何在索引中提交特定文件?

时间:2014-07-15 09:54:28

标签: git

示例:

» git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   a
    modified:   b

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   a

如果我修改了一个名为a的文件,并将其中的一部分添加到index,并且索引中还有一个名为b的文件。

我只想提交索引中的文件a,既不包括b也不包含在工作目录中。

我使用的方法是使用git commit -p并输入n以暂停。或git commit -p file并选择我想要的部分。

但是如果文件中的部分已经添加了索引,是否有更好的方法直接在索引部分中引导提交文件?


补充:

我想也许这是错误的使用git。

  

只有在下次提交时提交的更改才应添加   索引。

显然文件b不准备提交,因此它应该在工作目录中。

2 个答案:

答案 0 :(得分:4)

git commit a仅提交a并暂停b

以下是man page

的示例
$ edit hello.c hello.h
$ git add hello.c hello.h
$ edit Makefile
$ git commit Makefile
  

这使得提交记录了对Makefile的修改。 hello.c和hello.h的暂存更改不包含在生成的提交中。然而,他们的变化并没有丢失 - 他们仍然上演并且只是被阻止。

答案 1 :(得分:0)

  

我只想提交索引中的文件a,既不包括b也不包含在工作目录中。

听起来你根本不想跟踪b

git rm --cached b
echo b >> .gitignore
git add .gitignore
git commit -m "Add a, ignore b"

但是如果你想跟踪b,只是确保要添加任何修改,那么你can use git update-index

git reset -- b # will unstage (remove from index)
git update-index --skip-worktree -- b
...
# when ready to add b
git update-index --no-skip-worktree -- b
git add -- b