2

我曾经git add -p将我的代码更改拆分为多个提交。但是,在此git commit之后执行所有更改,包括未暂存的更改。我看了几个关于 SO 的问题,但找不到任何明显的错误。你能帮我理解我做错了什么吗?以下是我尝试过的命令及其输出。

bash-3.2$ git diff test11.txt
diff --git a/test11.txt b/test11.txt
index f077274..e811cae 100644
--- a/test11.txt
+++ b/test11.txt
@@ -1,5 +1,5 @@
-Hello
-World
+hello
+world

-Blahblahblah
-blah
+blahblahblah
+Blah
bash-3.2$ git add -p test11.txt
diff --git a/test11.txt b/test11.txt
index f077274..e811cae 100644
--- a/test11.txt
+++ b/test11.txt
@@ -1,5 +1,5 @@
-Hello
-World
+hello
+world

-Blahblahblah
-blah
+blahblahblah
+Blah
Stage this hunk [y,n,q,a,d,/,s,e,?]? s
Split into 2 hunks.
@@ -1,3 +1,3 @@
-Hello
-World
+hello
+world

Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? y
@@ -3,3 +3,3 @@

-Blahblahblah
-blah
+blahblahblah
+Blah
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? n

bash-3.2$ git status
# On branch test
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test11.txt
#
# 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:   test11.txt
bash-3.2$ git commit test11.txt
[test 1b85189] Test12
 1 files changed, 4 insertions(+), 4 deletions(-)
bash-3.2$ git status
# On branch test
nothing added to commit
4

3 回答 3

10

不要在git commit命令中指定文件名。

默认情况下,git commit在没有其他参数的情况下提交索引的内容(无论您通过什么暂存git add)。

但是,如果您指定文件名(例如git commit <filename>),那么 Git 实际上会完全绕过索引并提交指定文件的当前状态,因为它们在工作目录中。


基本上,使用git add 指定文件名git commit,但不要同时使用。

于 2012-09-16T06:18:17.693 回答
2
$ man git-commit
NAME
       git-commit - Record changes to the repository

SYNOPSIS
       git commit [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
                  [(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>]
                  [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify]
                  [-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>]
                  [--status | --no-status] [-i | -o] [--] [<file>...]
[...]

       <file>...
           When files are given on the command line, the command commits the contents of the named files, without recording the changes already
           staged. The contents of these files are also staged for the next commit on top of what have been staged before.

而不是写作git commit <file>,你会想写只是git commitgit commit -m "this is my commit message"

于 2012-09-16T06:19:42.687 回答
0

git commit --patch <pathnames...>做你所期待的。那就是:“提交我已经在这些特定文件中暂存的内容,但不要在这些文件中自动暂存并提交任何未暂存的大块。” 不幸的是,它还具有令人惊讶的效果,即提交未在<pathnames...>. (git 2.13.6)

于 2018-04-14T16:16:45.087 回答