图解优秀的版本控制工具GIT(2)

发表于:2013-11-11来源:nettedfish作者:不详点击数: 标签:Git
在开始阶段,我们处于topic分支上,执行git rebase master,那么169a6和2c33a上发生的事情都在master分支上重演一遍,分别对应于master分支上的e57cf和f7e63,最后

  在开始阶段,我们处于topic分支上,执行git rebase master,那么169a6和2c33a上发生的事情都在master分支上重演一遍,分别对应于master分支上的e57cf和f7e63,最后checkout切换回到topic分支。这一点与merge是一样的,合并前后所处的分支并没有改变。git rebase master,通俗的解释就是topic分支想站在master的肩膀上继续下去。

  cherry-pick

  cherry-pick命令复制一个提交点所做的工作,把它完整的应用到当前分支的某个提交点上。rebase可以认为是自动化的线性的cherry-pick。

  例如执行git cherry-pick 2c33a :

  正反过程对比

  理解了上面最晦涩的几个命令,我们来从正反两个方向对比下版本在本地的3个阶段之间是如何转化的。如下图(history就是本地仓库):

  如果觉得从本地工作目录到本地历史库每次都要经过index暂存区过渡不方便,可以采用图形右边的方式,把两步合并为一步。

  Some Tips

  如何管理空文件夹

  git本身不会对空文件夹进行版本控制,如果希望项目被clone后自带一些空目录,那么可以:

  在要被管理的空目录下创建.gitignore文件。

  在.gitignore文件内写入如下代码。第一行忽略所有文件。第二行除了.gitignore文件不被忽略。

  *

  !.gitignore

  用git实现远程备份

  git本地仓库的初始化采用git init . 即可。如果需要搭建异地备份,除了可以使用开源的gitlab等来搭建服务器外,还可以git --bare init . 来初始化远服务器仓库,然后把本地仓库推送到服务器仓库。这样可以轻松实现代码或文档的异地备份,即使把代码备份到本地也是可以的(这或许可以避免rm -rf *的悲剧哦):

  git remote add origin git://127.0.0.1/abc.git

  然后建立本地到本地的ssh信任关系,enjoy yourself!

  无密码登陆git服务器

  调试技巧:ssh -v git@github.com

  GIT与知识管理

  日常工作中,我习惯用git来管理github和本地的代码;也用git来管理各种配置文件,例如.vimrc,.bashrc等,以及各种技术文档。我的博客用vim+markdown来编写,也用git来做版本控制,很方便。感谢linus大神为我们写了这么好的工具!

  欢迎批评指正!

原文转自:http://nettedfish.sinaapp.com/blog/2013/08/05/deep-into-git-with-diagrams/