看日记学git

《看日记学git》之四

《看日记学git》系列

《看日记学git》序

《看日记学git》之一

《看日记学git》之二

《看日记学git》之三

===

这次我们来研究“改进代码之后怎么提交给git”。

还记得在之三中我们项目的main.c吧,其中的内容其实就是一个helloworld:

[root@wupengchong rocrocket]# cat -n main.c
1  #include<stdio.h>
2  int main()
3  {
4  printf(“hello world!\n”);
5  return 0;
6  }
这个时候,我来对main.c进行一些修改,在printf语句前加入一行:

printf(“Version: 0.01\n”);

于是程序变成了这样:

[root@wupengchong rocrocket]# cat -n main.c
1    #include<stdio.h>
2    int main()
3    {
4    printf(“Version: 0.01\n”);
5    printf(“hello world!\n”);
6    return 0;
7    }

接下来的两道工序主要是由开发者最后确认一下“自己的修改”:

[root@wupengchong rocrocket]# git diff –cached
[root@wupengchong rocrocket]#

这个git diff –cached是用来查看index file和仓库之间代码的区别的。由于我们目前只是在working tree里做了修改,还没有报告给index file,所以使用此命令显然会输出空信息。而如果省略–cached选项的话,就是比较working tree和index file的区别,由于我们的确在working tree里做了修改,所以使用git diff后会输出修改信息。(可能有些读者不知道working tree是什么意思,其实很简单,通俗的说,它就是你的源代码文件,在这个例子里也就是main.c文件喽)

[root@wupengchong rocrocket]# git diff
diff –git a/main.c b/main.c
index 3a88d8c..e0fe92e 100644
— a/main.c
+++ b/main.c
@@ -1,6 +1,7 @@
#include<stdio.h>
int main()
{
+printf(“Version: 0.01\n”);
printf(“hello world!\n”);
return 0;
}
(至于git diff的输出内容我们现在不必研究太深,只要知道这些信息表示的是修改后和修改前的不同之处就可以了)

使用git diff了解了不同之后,还可以使用git status命令来获取整体改动的信息:

[root@wupengchong rocrocket]# git status
# On branch master
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#       modified:   main.c
#
no changes added to commit (use “git add” and/or “git commit -a”)

可以看到提示信息“changed but not updated”,就是说git发现你有已经修改了但还未git add的内容。

如果git提示说“Changes to be committed”,那就是表明git发现了你已经git add但还未git commit的内容。

如果git提示说“Untracked files”,那么就是你增加了新文件或者在某个子目录下增加了新文件。

下面该进入提交阶段了。首先运行

[root@wupengchong rocrocket]# git add main.c

这句是要告诉git,我已经修改了main.c文件,你(指git)去检查一下。当然,如果你新增加了一个文件,比如new.c,也需要在这里先执行git add new.c告诉git。

提交我的工作:

[root@wupengchong rocrocket]# git commit
Created commit ecf78d1: This is the second version.
1 files changed, 1 insertions(+), 0 deletions(-)

至此,我的修改工作完成了,而且也顺利地提交给了git。还是不放心?来查查:

[root@wupengchong rocrocket]# git log
commit ecf78d1b3603d0f5015e8b14bee69870db6459e1
Author: rocrocket <wupengchong@gmail.com>
Date:   Thu Sep 18 15:39:47 2008 +0800

This is the second version.

Version 0.02

commit 3b1e328ad80caebe7fe2f4229e247d2ebe669cd8
Author: rocrocket <wupengchong@gmail.com>
Date:   Thu Sep 18 15:32:53 2008 +0800

This is the first git project.

At 20080916
用git log可以查看开发日志!看到黑体字了吧,Version0.02就是我刚才在git commit时输入的新信息。这已经是我们项目的第二个开发版本了。(成就感油然而生)

===

总结一下

如果修改了项目代码,先git add你修改过的文件,再git diff并git status查看确认,然后git commit提交,然后输入你的开发日志,最后git log再次确认。

现在教给你一个偷懒方法,那就是git commit -a,这个命令可以直接提交所有修改,省去了你git add和git diff和git commit的工序,可谓一条龙服务。

但是,此处有一点应该注意,那就是git commit -a无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文件夹,那么就要老老实实的先git add .,再git commit喽。[此处非常感谢freeren的提醒]

对了,针对开发日志,要说一句:切记写开发日志的时候,第一行一定要是少于50字的开发概括信息,而且第二行务必是空行,第三行开始才可以开始细致描述开发信息。这是因为很多版本服务系统中的email机制都会选取log中的第一行为邮件题目。(你应该明白了吧:))

ps:我可能在此前也没有太注意关于日志写法的问题,今后也要避免错误:)

===
如果你对git感兴趣,请继续阅读:

《看日记学git》之五

《看日记学git》之六

《看日记学git》之七

over~

7条评论

  1. 本机上安装的是git-core,然后在git-log的时候,respond说fatal:bad default revision ‘HEAD’, 是不是没有安装完整版git的缘故?还有‘HEAD’是什么?

    1. @Soli,

      看了add命令的说明,好像git的add和svn的add区别还是蛮大的。

      “Thus after making any changes to the working directory, and before running the commit command, you must use the add command to add any new or modified files to the index.”

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *