===
这次我们来研究“改进代码之后怎么提交给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:我可能在此前也没有太注意关于日志写法的问题,今后也要避免错误:)
转载:http://www.gitchina.org/?p=175