Git commit -a 混淆

30
我正在使用Git Bash,并试图弄清楚当我输入"git commit -a"时发生了什么。
似乎VIM会打开以编辑我的提交消息,但我该如何保存并实际完成此提交?我在编辑器中键入并按Enter键,但它只创建另一行。
FYI:我正在在我的Mac上使用VM Fusion,所以我的一些按键可能有所不同。

1
这可能会有所帮助:http://stackoverflow.com/questions/7154936/ultimate-vim-tutorial - Daenyth
4个回答

42

这是一个关于VIM而不是Git本身的问题(如果我没记错)

VIM使用多种模式,要退出插入模式,请按ESC或^ C。要保存并退出文件,请使用ZZ:x:wq

为了完整起见: git commit -a会先将所有已跟踪和更改的文件内容添加到索引中,然后在vim(或您选择的编辑器)中指定提交消息后创建提交。


没错,我只是想省略一步并了解如何在vim中工作 - 谢谢。 - Slee
3
你刚刚帮我解决了一个小时的头痛问题..哈哈,谢谢。ESC键管用了;) - Bono

26

只需离开VIM(命令模式 -> :wq)。

-a标志的作用如下:

git add -u
git commit ...

-m标志指定了提交消息。这个消息是必须的,所以如果你不传递 (git commit -m "My message"),默认文本编辑器将会被打开(你可以在git配置中更改它),然后你需要编写一个提交消息,保存并退出编辑器。


5
git commit -a 不像 git add .,它的作用类似于 git add -u - knittl
2
然后保存并退出编辑器。注意:退出编辑器会保存提交信息。 - Pup
19
“只是离开vim”可能是最没有帮助的指令之一。这就像告诉米诺陶洛斯(Minotaur)“只是离开迷宫”。 - Corvus
你能解释一下 'git add -u' 是什么吗?我是 Git 的新手,对它的作用感到非常困惑。 - Jack

14

为了保存你的提交,你需要像在vim中一样保存并退出文件。

:wq

如果你改变主意想要取消提交,则可以不保存退出。

:q!

然而你不必使用VIM,你可以设置编辑器。例如以下命令将把git使用的编辑器改为textmate。

git config --global core.editor textmate

3

正如其他人所说,打开Vim是为了添加有关您正在提交的更改的信息。似乎您系统上的默认编辑器是Vim。Git已设置好,以便在您使用:wq、:x或其他命令关闭Vim后,将包括您键入并保存在Vim中的任何消息。

除了Andrew Myers建议的更改Git调用的编辑器的方法外,您还可以在命令行上包含一个简单的消息,例如:

git commit -am 'This is my message for the commit. . . '

如果您这样做,Git将不会打扰您打开文本编辑器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接