示例:
» 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不准备提交,因此它应该在工作目录中。
答案 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