【翻译】git教程(git tutorial)【二】

3 篇文章 0 订阅
2 篇文章 0 订阅
继续上次的教程,这篇博客使用MarkDown编辑器编写。

探索历史

Git历史被展现为一系列相关联的提交。我们已经查看过使用git log命令能列出这些提交。注意每个git日志的第一行都给出了提交的名称:
$git log
commit 3893e06fea5321867dd8af4140ced494012b8993
Author: mengyi <mengyiliangcheng@gmail.com>

我们能将这个名字给git show,用于查看这次提交的详情:

$git show 3893e06fea5321867dd8af4140ced494012b8993

但是这里还有其他的方式查看这次提交,你可以只使用名称的前几个字符,只要能独立标识这次提交就可以了:

$git show 3893e06fea5  #名称开始的几个字符
$git show HEAD         #当前分支的tip
$git show experimental #“experimental”分支的tip

每次提交通常有一个父(parent)提交,指出项目以前的工作状态:

$git show HEAD^     #查看HEAD的父(parent)提交
$git show HEAD^^    #查看HEAD的祖父(grandparent)提交
$git show HEAD~4    #查看HEAD的曾祖辈(great-great grandparent)提交

注意:合并提交的可能有超过一个父提交

$git show HEAD^1    #显示第一个父辈提交(和HEAD^相同)
$git show HEAD^2   #显示第二个父辈提交

在运行如下命令后,你也能自己命名提交:

$git tag v2.5 1b2e1d63ff

你就能通过“v2.5”这个名字来查看 ”1b2e1d63ff“,如果你打算把这个名字和其他人分享(比如说,标识一个项目的发布版本),你应该创建一个“tag”对象,可能还要对其签名,查看git-tag获取更多详情。
任何需要知道提交对象的git命令,都能使用这些名字,例如:

$git diff v2.5 HEAD        #将当前HEAD和v2.5的HEAD进行比较
$git branch statble v2.5 #开始一个名字是“stable”的新分支
$git reset --hard HEAD^   #重设你当前的分支和工作目录到HEAD^的状态

请注意最后一个命令:它将从这个分支中删除所有HEAD^之后的提交,另外丢失了这个工作目录中的任何修改。如果这个分支是这些提交的唯一分支,那么这些提交都将丢失。同时,不要在公共可见分支中使用git reset命令,因为它将在其他开发者清理历史的时候强制产生不必要的合并。如果你需要撤销你所做的修改,使用git revert
git grep命令能够在你任何版本的项目中搜索对应的字符,例如:

$git grep "hello" v2.5

在v2.5的所有事件中搜索“hello”
如果你没有输入提交的名称,git grep将在你当前的文件夹中搜索所有git管理的文件,例如:

$git grep "hello"

这是一个快捷的方式去搜索仅仅被git跟踪的文件。
很多git命令也接受一组能被多种方式指定的提交,这里用git log来举例:

$git log v2.5..v2.6     #显示v2.5和v2.6之间提交的log
$git log v2.5          #显示v2.5以后的提交
$git log --since="2 weeks ago" #显示最近两周的提交
$git log v2.5.. Makefile  #显示从v2.5以后修改了Makefile的提交

你也能给git log一个提交的范围,其中第一个不一定是第二个的祖辈;例如,“stable”和“master”是一段时间以前从一个公共提交分出来的,然后执行:

$git log stable..master

将列出“master”分支的提交但是并没有“stable”分支的提交,然而:

$git log master..stable

将显示“stable”分支的提交但并没有“master”分支的提交
git log有一个缺点:它必须以列表的形式展现提交,当历史中有很多开始分支然后又合并回来的开发线,git log展现的这些提交就显得没有意义。
很多拥有很多开发者的项目会有频繁的合并,gitk在显示他们历史方面做得更好,例如:

$gitk --since="2 weeks ago" drivers/

它允许你在“drivers”目录下搜索近2周以来所有的修改文件的提交。(注意:你能通过按住控制键的同时按“-”或“+”来调整gitk的字体)
最后,大部分接受文件名的命令允许你在文件名前加上提交名,为这个文件指定特定的版本:

$git diff v2.5:Makefile HEAD:Makefile.in

你也能使用git show去查看任意这样的文件:

$git show v2.5:Makefile

下一步

这个教程应该足以为你的项目进行基本的版本分布管理控制。然而为了完全理解git的深度和强大,你需要理解它基于的两个基本的概念:

  • 这个对象数据库是用来存储你项目文件、目录和提交的历史的优雅的系统
  • 索引(index)文件是目录树种状态的缓存,用于创建提交,检出工作目录,将不同的树进行合并。

本教程的这两个部分解释了对象数据库,素银文件,和其他一些你将在大多数git中需要的奇怪的东西。你能在gittutorial-2中找到他们。
如果你现在立马不想继续下去,这里有些你感兴趣的离题的东西:

  • git-format-patch,git-am:他们将一系列的git提交转换成电子邮件补丁,对于Linux Kernel这类重度依赖于邮件补丁的项目十分有用。
  • git-bisect: 当你的项目中有回归,一种跟踪bug的方法是通过搜索历史,查找错误的确切的提交。git bisect能够帮助你为那个提交执行二进制搜索。
  • gitworkflows:给出推荐工作流的概述
  • everyday GIT with 20 Commands Or So
  • gitcv-migration:为CVS用户的git

参见

titutorial-2 gitcvs-migration gitcore-tutorial gitglossary git-help gitworkflows Everyday git The Git User’s Manual

GIT

git套件的一部分

备注

  1. Git用户手册
    file:///usr/share/doc/git-1.7.1/user-manual.html
  2. 每天20个GIT命令
    file:///usr/share/doc/git-1.7.1/everyday.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值