此时,我们可以再次使用组合命令 git-update-index 和 git-commit 将我们的工作提交到版本库中。
$ git-update-index hello
$ git-commit -m "new day for git"
实际上,如果要提交的文件都是已经纳入 git 版本库的文件,那么不必为这些文件都应用 git-update-index 命令之后再进行提交,下面的命令更简捷并且和上面的命令是等价的。
$ git-commit -a -m "new day for git"
直至现在为止,我们的项目版本库一直都是只有一个分支 master。在 git 版本库中创建分支的成本几乎为零,所以,不必吝啬多创建几个分支。下面列举一些常见的分支策略,仅供大家参考:
· 创建一个属于自己的个人工作分支,以避免对主分支 master 造成太多的干扰,也方便与他人交流协作。
· 当进行高风险的工作时,创建一个试验性的分支,扔掉一个烂摊子总比收拾一个烂摊子好得多。
· 合并别人的工作的时候,最好是创建一个临时的分支,关于如何用临时分支合并别人的工作的技巧,将会在后面讲述。
创建分支
下面的命令将创建我自己的工作分支,名叫 robin,并且将以后的工作转移到这个分支上开展。
$ git-branch robin
$ git-checkout robin
删除分支
要删除版本库中的某个分支,使用 git-branch -D 命令就可以了,例如:
$ git-branch -D branch-name
查看分支
运行下面的命令可以得到你当前工作目录的分支列表:
$ git-branch
如果你忘记了你现在工作在哪个分支上,运行下面的命令可以告诉你:
$ cat .git/HEAD
这一节介绍几个查看项目的版本库的发展变化以及比较差异的很有用的命令:
git-show-branch
git-diff
git-whatchanged
我们现在为 robin, master 两个分支都增加一些内容。
$ git-checkout robin
$ echo "Work, work, workd" >> hello
$ git-commit -m "Some workd" -i hello
$ git-checkout master
$ echo "Play, play, play" >> hello
$ echo "Lots of fun" >> example
$ git-commit -m "Some fun" -i hello example
git-show-branch 命令可以使我们看到版本库中每个分支的世系发展状态,并且可以看到每次提交的内容是否已进入每个分支。
$ git-show-branch
这个命令让我们看到版本库的发展记录。
* [master] Some fun
! [robin] some work
--
* [master] Some fun
+ [robin] some work
*+ [master^] a new day for git
譬如我们要查看世系标号为 master^ 和 robin 的版本的差异情况,我们可以使用这样的命令:
$ git-diff master^ robin
我们可以看到这两个版本的差异:
diff --git a/hello b/hello
index 263414f..cc44c73 100644
--- a/hello
+++ b/hello
@@ -1,2 +1,3 @@
Hello World
It's a new day for git
+Work, work, work
我们现在再用 git-whatchanged 命令来看看 master 分支是怎么发展的。
$ git-checkout master
$ git-whatchanged
diff-tree 1d2fa05... (from 3ecebc0...)
Author: Vortune.Robin
Date: Tue Mar 21 02:24:31 2006 +0800
Some fun
:100644 100644 f24c74a... 7f8b141... M example
:100644 100644 263414f... 06fa6a2... M hello
diff-tree 3ecebc0... (from 895f09a...)
Author: Vortune.Robin
Date: Tue Mar 21 02:17:23 2006 +0800
a new day for git
:100644 100644 557db03... 263414f... M hello
从上面的内容中我们可以看到,在 robin 分支中的日志为 "Some work" 的内容, 并没有在 master 分支中出现。
既然我们为项目创建了不同的分支,那么我们就要经常地将自己或者是别人在一个分支上的工作合并到其他的分支上去。现在我们看看怎么将 robin 分支上的工作合并到 master 分支中。现在转移我们当前的工作分支到 master,并且将 robin 分支上的工作合并进来。
$ git-checkout master
$ git-merge "Merge work in robin" HEAD robin
合并两个分支,还有一个更简便的方式,下面的命令和上面的命令是等价的。
$ git-checkout master
$ git-pull . robin
但是,此时 git 会出现合并冲突提示:
Trying really trivial in-index merge...
fatal: Merge requires file-level merging
Nope.
Merging HEAD with d2659fcf690ec693c04c82b03202fc5530d50960
Merging: