教我git commit

时间:2011-04-11 18:44:13

标签: git version-control

根本不了解git commit。

自从我使用git已经过了一周,所有这些git都带有 -a,-m,新文件,未跟踪等等让我完全糊涂了。 Tortoisegit目前正在拯救我,但我想了解它的本质并以一种非常简单的方式使用它。

当我在git命令行中时,选择性地提交一些文件并将其余文件保留给另一个提交是相当困难的。我该如何轻松实现这一目标?

4 个答案:

答案 0 :(得分:30)

这很简单。您需要先添加索引所需的更改:

git add file1 file2

然后

git commit

如果删除了文件,则添加会执行此操作。添加意味着“添加更改”,即使它是删除。

如果您想添加所有更改:

git add -A

提交时的-a参数表示添加跟踪文件的所有更改并提交它们。所以

git commit -a

不会提交您创建的新文件。您必须明确添加此内容。

-m参数可让您避免打开编辑器来编辑提交消息,并使用您在-m选项后面添加的内容:

git commit -m "Use this message and don't open the editor"

有时这不是一个好主意。如果您只是尝试合并并发生冲突,一旦您解决冲突并提交,git会为您缓存一条非常好的消息。所以git commit更好。

要有选择地添加文件,请使用git add:

上的补丁修饰符
git add -p

现在会提示您有关文件的信息。这非常强大,因为您还可以指定文件的一部分,或者编辑要添加到索引的内容。 git commit只会添加那些。

如果你想要一些不是togoisegit的gui帮助(避免windows shell集成),请使用git gui

以下是解释索引(或分段文件)的图表:

enter image description here

(来自http://progit.org/book/ch2-2.html

希望这会有所帮助。

答案 1 :(得分:5)

  

当我在git命令行中时,选择性地提交一些文件并将其余文件保留给另一个提交是相当困难的。我该如何轻松实现这一目标?

具有讽刺意味的是,这是git非常简单的事情之一,但你必须学习其他版本控制系统所没有的概念。这个想法是“临时区域”(技术上称为“索引”),它基本上跟踪下一次提交中的内容。当你说git add somefile没有说“开始跟踪这个名字的文件”时,它意味着“暂存文件的内容,就像现在一样”。你可以只为工作树中选择的文件执行此操作 - 然后,普通git commit只需将暂存区域的内容转换为下一次提交。

使用-a参数git commit基本上说“我不关心这个临时区域/索引业务,只需在提交之前暂存所有被跟踪的内容”。所以,直到你对暂存特定文件的想法感到满意为止,我才会做一个简单的“git commit”。

当您添加文件以适应这个想法时,经常值git status运行 - 它最多显示三个部分中的文件,但如果在该部分中没有任何内容可报告,则不会全部存在:

要提交的更改:

这列出了已经暂存的更改,因此将在下一次提交中进行。这包括新文件,已暂存删除的文件以及任何具有分阶段更改的文件。

已更改但未更新:

列出了尚未暂存的更改的文件。

未跟踪文件:

这些是git不知道的文件 - 通常你会想要忽略它们,方法是在你的.gitignore文件中添加模式,或者用git add添加它们。

请注意,文件可以出现在前两个部分中。例如,您可以更改Makefile,然后使用git add Makefile将其添加到索引中。然后,如果您继续对Makefile进行更多更改,保存,然后运行git status,您会看到它已在“要提交的更改”和“已更改但未更新”中列出 - 那是因为(如上所述)git add Makefile只是在运行命令时分段文件的确切内容。如果再次运行git add Makefile,舞台版本将被工作树中的版本覆盖,以便您对该版本所做的所有更改都会暂存。

另外几个提示可能值得添加,关于有用的命令对git diffgit diff --cached - 基本上,它们的含义是:

  • git diff:“我还没有上演哪些变化?”
  • git diff --cached:“我已经进行了哪些更改?”

正如您可以从上面解决的那样,那是因为git diff显示了暂存区域和工作树之间的区别,而git diff --cached显示了上次提交和暂存区域之间的差异。

答案 2 :(得分:2)

您可以点击git commit(同时here)查看git commit --help的手册页。

要添加要提交的文件,请使用git add,或者,如果文件已在存储库中,-a标记将为您提供帮助。

-m会在您的提交中标记一条消息。

如果要有选择地选择文件,请使用git add,然后使用git commit而不使用-a标记(这会将所有更改添加到存储库中存在的文件中)。

我个人也使用-s选项,如果您在git配置中有signed off by <your.email@gmail.com>,最后会添加git config --global user.email your.email@google.com。如果没有,请使用{{1}}。

答案 3 :(得分:1)

在git中提交文件很简单。 对于添加文件,我们有以下命令

git add file1 file2

或者,如果您只想通过

添加所有文件
git add *

然后,提交。根据专业人士的说法,您需要使用提交添加消息,以便更容易跟踪您提交的内容。为此你可以使用

git commit -m "your message"

如果要提交已添加git add的任何文件,并提交自此以后更改的所有文件。你可以使用

git commit -a

如果您想要更改的文件列表以及仍需要添加或提交的文件列表。你可以使用

git status

并将更改发送到远程存储库的主分支。命令是

git push origin master

希望这有助于您理解git add,commit和push的概念。并解决你的问题。