Git Community Book翻译 ( 七)

有很久没有更新了,因为前一段时间我和书的作者Chacon联系了

我的想法是能够把”Git Community Book" 这本书的中译版能回馈到

开源社区里去。

但是作者有另外一本更棒的书叫“Pro Git", 而且这本书有一个很棒的

中文译者chunzi,于是我再和他联系,想能做一些辅助性的工作。

但是结果很不幸,我的ubuntu 怎么也建不好"Pro Git"这本书的编译

环境。(chunzi的图片编译环境是mac)

没有办法,我只好回过头来再来搞“Git Community Book"这本书。

此书的文件内容也是用Git来维护的,http://github.com/schacon/gitbook

于是我也fork了一个分支出来,用emacs + github 来翻译这本书

有兴趣的朋友可以到这里http://github.com/liuhui998/gitbook看一下。

如果翻译错了也可以给我发个patch 过来。

:)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

分支是很轻量级且容易的,这样就很容易来尝试它。

如何合并

你可以用下面的面的命令来合并两个分离的分支: git merge :

$ git merge branchname

这个命令把分支"branchname"合并到了当前分支里面。如有冲突(冲突-- 同一个文件在远程分支和本地分支里按不同的方式被修改了);那么命令 的执行输出就像下面一样

$ git merge next
 100% (4/4) done
Auto-merged file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

在有问题的文件上会有冲突标记,在你手动解决完冲突后就可以把此文件添 加到索引(index)中去,用git commit命令来提交,就像平时修改了一个文件 一样。

如果你用gitk来查看commit的结果,你会看到它有两个父分支:一个指向当前 的分支,另外一个指向刚才合并进来的分支。

解决合并中的冲突

如果执行自动合并没有成功的话,git会在索引和工作树里设置一个特殊的状态, 提示你如何解决合并中出现的冲突。

有冲突(conflicts)的文件会保存在索引中,除非你解决了问题了并且更新了索引 执行 git commit 都会失败:

$ git commit
file.txt: needs merge

如果执行 git status 会显示这些文件没有合并(unmerged),这些有冲 突的文件里面会添加像下面的冲突标识符:

<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

你所需要的做是就是编辑解决冲突,(接着把冲突标识符删掉),再执行下面的命令:

$ git add file.txt
$ git commit

注意:提交注释里已经有一些关合并的信息了,通常是用这些默认信息,但是 你可以添加一些你想要的注释。

上面这些就是你要做一个简单合并所要知道的,但是git提供更多的一些信息来 帮助解决冲突。

撒销一个合并

如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下 面的命令回到合并之前的状态:

$ git reset --hard HEAD

或者你已经把合并后的代码提交,但还是想把它们撒销:

$ git reset --hard ORIG_HEAD

但是刚才这条命令在某些情况会很危险,如果你把一个已经被另一个分支合并的分支给删了,那么 以后在合并相关的分支时会出错。

快速向前合并

还有一种需要特殊对待的情况,在前面没有提到。通常,一个合并会产生一个合并提交(commit), 把两个父分支里的每一行内容都合并进来。

但是,如果当前的分支和另一个分支没有内容上的差异,就是说当前分的每一个提交(commit) 都已经存在另一个分支里,git 就会执行一个“快速向前"(fast forward)操作;git 不创建任 何新的提交(commit),只是将当前分支指向合并进来的分支。

gitcast:c6-branch-merge

猜你喜欢

转载自liuhui998.iteye.com/blog/700307
今日推荐