如何提交只修改(而不是新的或删除)的文件?
git status
显示了一堆被修改的文件和一些被删除的文件。 我想先提交修改后的文件,然后删除的文件。 我没有在git add
中看到任何选项,使我能够做到这一点。 我该怎么做?
编辑 :正如指出的, git add
不会上演被删除的文件,所以git add .
会做。 但是它包含了那些没有被跟踪的文件的副作用,我也想避免。 我已经相应地改变了问题的标题。
以下命令应该做的伎俩:
git commit -a
要么
git commit -am "commit message"
从Pro Git书籍:
为git commit命令提供-a选项使得Git在执行提交之前自动对已经被跟踪的每个文件进行分级
git diff --name-only --diff-filter=M | xargs git add
(基于Charles Bailey对相关问题的回答 )
你可以使用:
git add -u
对自上次提交后已修改的文件进行分段。
从git-add手册页:
-u
–update只匹配已经跟踪的索引文件而不是工作树。 这意味着它永远不会展示新文件,但是它将逐步修改被跟踪文件的新内容,并且如果工作树中的相应文件已被删除,它将从索引中删除文件。 如果没有,默认为“。”; 换句话说,更新当前目录及其子目录中的所有跟踪文件。
不知道何时添加此function。
我可能会失去一些东西,但Git添加不包括删除的文件,你必须使用Git RM来删除这些:
mkdir git-test cd git-test git init touch a touch b touch c git add . git commit -m "Initial" echo "a" > a echo "b" > b rm c git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: a # modified: b # deleted: c # git add . # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: a # modified: b # # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: c # git commit -m "Changed" git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: c # git rm c git commit -m "Deleted"
而git日志显示了三个提交。
我会小心使用git commit -a – 除非您确定您的.gitignore文件包含所有您不想在其中添加的文件
我已经使用git commit了很多次,在这种情况下,我最终不得不从git仓库清理/删除临时文件等