教我git commit

Qui*_*Par 16 git version-control

根本不懂git commit.

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

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

Ada*_*ruk 30

这很简单.您需要首先将所需的更改添加到索引:

git add file1 file2
Run Code Online (Sandbox Code Playgroud)

然后

git commit
Run Code Online (Sandbox Code Playgroud)

如果你删除了一个文件,那就添加了.添加意味着" 添加更改 ",即使它是删除.

如果要添加所有更改:

git add -A
Run Code Online (Sandbox Code Playgroud)

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

git commit -a
Run Code Online (Sandbox Code Playgroud)

不会提交您创建的新文件.您必须明确添加它.

-m参数允许您避免打开编辑器来编辑提交消息,并使用您在以下-m选项中放置的内容:

git commit -m "Use this message and don't open the editor"
Run Code Online (Sandbox Code Playgroud)

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

要有选择地添加文件,请在git add上使用patch修饰符:

git add -p
Run Code Online (Sandbox Code Playgroud)

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

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

这是一个解释索引(或分阶段文件)的图表:

在此输入图像描述

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

希望这可以帮助.

  • 我一直使用 `git add .` (没有 -A,这显然是默认值)来添加所有更改。 (2认同)
  • 你将错过删除或未跟踪的文件.Git添加.-A会将所有内容移动到索引中. (2认同)
  • 对于那个"add all"命令,不必要的是`.`.这是`git add -A`或`git add -u`的默认值. (2认同)

Mar*_*air 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之间的差异,同时显示了上次提交和暂存区域之间的差异.