当我处理多个文件时,有时我会处理与不同文件相对应的不同功能。
我通常做的是:
git status
git add <file/directory 1> # eventually with /* following directory name to commit
# the subdirectories rather than the directory itself
# (not sure how it works exactly)
git add <file/directory 2>
git commit -a # here add commit message in editor
[ ... after N commits ... ]
git push (origin master / whatever)
我注意到大多数时间它只是起作用:提交的文件正是我添加的文件。但有时候,它会提交所有文件。
我做错了吗?
另外,提交-a 和提交-m 之间的区别是什么?
答案 0 :(得分:4)
git commit -a
是你的问题。 git commit -a
添加所有文件修改并提交它们。 -a
和-m
是非常不同的旗帜; -m
允许您在命令行上键入消息。 man git-commit
或git commit --help
会向您显示标记的含义。
答案 1 :(得分:3)
当您提交时,您只提交已提交的提交的内容。要提交某些内容以进行提交,请使用git add
。
$ ls
file1 file2 file3
$ git status
On branch master
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: file1
modified: file2
modified: file3
no changes added to commit (use "git add" and/or "git commit -a")
这里,我们有三个文件,所有文件都经过修改。但是,我们只想提交file1
和file3
。
$ git add file1 file3
$ git commit -m 'my commit message'
[master 7c43d4b] my commit message
2 files changed, 2 deletions(-)
提交已完成,但file2
保持原样,未提交。
$ git status
On branch master
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: file2
no changes added to commit (use "git add" and/or "git commit -a")
当您使用-a
标记git commit
时,您告诉它首先添加已更改的所有内容,然后执行提交。这可能是一个有用的命令,但它似乎并不是你在这里寻找的东西。它大致相当于
cd /base/of/repository
git add .
git commit
(旁注:git commit -a
只会添加对已跟踪文件的更改。如果您有.gitignore
个文件或未跟踪文件,则这些更改不上演。)< / p>
重要的是要意识到git add
阶段更改了内容,这与文件并不总是一样。
$ git status
On branch master
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: file2
no changes added to commit (use "git add" and/or "git commit -a")
$ git add file2
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file2
$ echo "foobar" >> file2
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file2
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: file2
在这里,我们开始使用修改后的file2
,然后使用git add
进行展示。在那之后,它显示为准备提交。然后,我们再次更改文件 。现在,它已经为提交进行了一些更改,但是其他更改没有上传。如果我们现在承诺,
$ git commit -m 'my commit message'
[master 4342cdc] my commit message
1 file changed, 1 deletion(-)
$ git status
On branch master
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: file2
no changes added to commit (use "git add" and/or "git commit -a")
我们已经进行了阶段性的改变,但那些没有上演的人仍然坐在那里等着我们处理它们。 两者都在同一个文件中。
这使得git中的提交非常灵活,尽管它会让人感到困惑。
您可能还想阅读git add -p
,这是一种仅对文件更改部分进行分段的方法。我经常使用它来进行更改,但跳过文件中剩下的各种笔记和垃圾,但尚未清理。
答案 2 :(得分:1)
根据经验和正确的方法:
git status
查看尚未提交的文件
git add -A
添加所有未提交的文件或
git add yourFileName
,然后强>
git commit -m "your message"
后跟
git push