Git参考手册

          在线版:直接上个地址搞定http://gitref.justjavac.com/


          离线版 :  链接:http://pan.baidu.com/s/1o7CTwPO 密码:0dzg        


另外,再来追加一篇,别人的抄的参考手册!

 

GIT 学习手册简介

本站为 Git 学习参考手册。目的是为学习与记忆 git 使用中最重要、最普遍的命令提供快速翻阅。 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以及参数。

本手册将从入门到精通指导大家。 首先,我们要从如何以 Git 的思维方式管理源代码开始。

如何以 GIT 的方式思考(这节可以不用看懂,接着看下面的内容,看完就全懂了。

懂得 Git,第一件重要的事情就是要知道它与 Subversion、Perforce 或者任何你用过的版本控制工具都有着很大的差别。 通常,忘掉你预想的版本控制方式,改以 Git 的方式思考,能够帮助你更好地学习 Git。

让我们从头开始。假设你正在设计一个新的源代码管理系统。在你使用某个工具之前,是如何完成基本的源码版本控制工作的呢? 十有八九,你只是在项目到达某些阶段的时候,对项目做一份拷贝。

 $ cp -R project project.bak

这样,你就可以在事情变得一团糟的时候很方便的返回到之前的状态,或者通过对比当前的项目与之前的拷贝,看看自己在之后的工作中,都做了哪些修改。

如果你有点偏执,你可能会经常作上面说的事情,或许还会给项目拷贝加个日期:

 $ cp -R project project.2010-06-01.bak

如此,你就有了一堆项目在各个阶段的快照,来作比较、查看。使用这种模式,你还可以有效地与人分享项目变更。 如果你会在项目到达一定阶段的时候给它打个包,丢到自己的网站上,那其他的开发者们,就能很方便地下载它,做点改动,并给你补丁回馈。

 $ wget http://example.com/project.2010-06-01.zip
 $ unzip project.2010-06-01.zip
 $ cp -R project.2010-06-01 project-my-copy
 $ cd project-my-copy
 $ (做了某些修改)
 $ diff project-my-copy project.2010-06-01 > change.patch
 $ (通过E-mail发送修改补丁)

以此方式,原先的开发者就能将其他人的改动应用到他的项目中去,其他开发者也能了解你做的变更。其实这便是许多开源项目采用过多年的协作方式。

这办法其实很好使,所以假设我们现在想要写个工具,让这个办法更快、更简单。 我们与其实现一个工具以记录每个文件的版本,可能不如去实现个工具以使创建、储存项目的快照更加方便,不用每次都去人肉作整个项目的拷贝。

这就是 Git 的精要所在。你通过 git commit告诉 Git 你想保存一份项目快照, Git 就会为你的项目中的各个文件的当前状态存一份记录。之后,绝大部分的 Git 命令都围绕这些记录展开。 比如查看它们的区别(diff),提取它们的内容,等等。


如果你将 Git 看作一个排序、对比以及合并项目更新的工具,那就容易理解状况和正确做事了。

目录

获取与创建项目

基本的快照

分支与合并

分享与更新项目

检查与比较

一、获取与创建项目

你得先有一个 Git 仓库,才能用它进行操作。仓库是 Git 存放你要保存的快照的数据的地方。

拥有一个 Git 仓库的途径有两种。在已有的目录中,初始化一个新的,其一。 比如一个新的项目,或者一个已存在的项目,但该项目尚未有版本控制。如果你想要复制一份别人的项目, 或者与别人合作某个项目,也可以从一个公开的 Git 仓库克隆,其二。本章将对两者都做介绍。

git init 将一个目录初始化为 Git 仓库

在目录中执行 git init,就可以创建一个 Git 仓库了。比如,我们恰好有个目录,里头有些许文件,如下:

$ cd konnichiwa
$ ls
README   hello.rb

在这个项目里头,我们会用各种编程语言写 “Hello World” 实例。 到目前为止,我们只有 Ruby 的,不过,这才刚上路嘛。为了开始用 Git 对这个项目作版本控制,我们执行一下 git init

$ git init
Initialized empty Git repository in /opt/konnichiwa/.git/
# 在 /opt/konnichiwa/.git 目录初始化空 Git 仓库完毕。

现在你可以看到在你的项目目录中有个 .git 的子目录。 这就是你的 Git 仓库了,所有有关你的此项目的快照数据都存放在这里。

$ ls -a
.        ..       .git     README   hello.rb

恭喜,现在你就有了一个 Git 仓库的架子,可以开始快照你的项目了。

简而言之,用 git init 来在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。

git clone 复制一个 Git 仓库,以上下其手

如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以克隆那个项目。 执行 git clone [url],[url] 为你想要复制的项目,就可以了。

$ git clone git://github.com/schacon/simplegit.git
Initialized empty Git repository in /private/tmp/simplegit/.git/
remote: Counting objects: 100, done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 100 (delta 35), reused 0 (delta 0)
Receiving objects: 100% (100/100), 9.51 KiB, done.
Resolving deltas: 100% (35/35), done.
$ cd simplegit/
$ ls
README   Rakefile lib

上述操作将复制该项目的全部记录,让你本地拥有这些。并且该操作将拷贝该项目的主分支, 使你能够查看代码,或编辑、修改。进到该目录中,你会看到 .git 子目录。 所有的项目数据都存在那里。

$ ls -a
.        ..       .git     README   Rakefile lib
$ cd .git
$ ls
HEAD        description info        packed-refs
branches    hooks       logs        refs
config      index       objects

默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的任何东西。如果你想要一个不一样的名字, 你可以在该命令后加上它,就在那个 URL 后面。

简而言之,使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

二、基本快照

Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目的快照的命令作介绍。

这里有个重要的概念,Git 有一个叫做“索引”的东东,有点像是你的快照的缓存区。这就使你能够从更改的文件中创建出一系列组织良好的快照,而不是一次提交所有的更改。

简而言之,使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status 和 git diff 查看有何改动, 最后用 git commit 将你的快照记录。这就是你要用的基本流程,绝大部分时候都是这样的。

git add 添加文件到缓存

在 Git 中,在提交你修改的文件之前,你需要把它们添加到缓存。如果该文件是新创建的,你可以执行 git add 将该文件添加到缓存,但是,即使该文件已经被追踪了 —— 也就是说,曾经提交过了 —— 你仍然需要执行 git add 将新更改的文件添加到缓存去。让我们看几个例子:

回到我们的 Hello World 示例,初始化该项目之后,我们就要用 git add 将我们的文件添加进去了。 我们可以用 git status 看看我们的项目的当前状态。

$ git status -s
?? README
?? hello.rb

我们有俩尚未被追踪的文件,得添加一下。

$ git add README hello.rb

现在我们再执行 git status,就可以看到这俩文件已经加上去了。

$ git status -s
A  README
A  hello.rb

新项目中,添加所有文件很普遍,可以在当前工作目录执行命令:git add .。 因为 Git 会递归地将你执行命令时所在的目录中的所有文件添加上去,所以如果你将当前的工作目录作为参数, 它就会追踪那儿的所有文件了。如此,git add . 就和 git add README hello.rb 有一样的效果。 此外,效果一致的还有 git add *,不过那只是因为我们这还木有子目录,不需要递归地添加新文件。

好了,现在我们改个文件,再跑一下 git status,有点古怪。

$ vim README
$ git status -s
AM README
A  hello.rb

“AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。这意味着如果我们现在提交快照, 我们记录的将是上次跑 git add 的时候的文件版本,而不是现在在磁盘中的这个。 Git 并不认为磁盘中的文件与你想快照的文件必须是一致的 —— (如果你需要它们一致,)得用 git add 命令告诉它。

一言以蔽之, 当你要将你的修改包含在即将提交的快照里的时候,执行 git add。 任何你没有添加的改动都不会被包含在内 —— 这意味着你可以比绝大多数其他源代码版本控制系统更精确地归置你的快照。

请查看《Pro Git》中 git add 的 “-p” 参数,以了解更多关于提交文件的灵活性的例子。

git status 查看你的文件在工作目录与缓存的状态

正如你在 git add 小节中所看到的,你可以执行 git status 命令查看你的代码在缓存与当前工作目录的状态。我演示该命令的时候加了 -s 参数,以获得简短的结果输出。 若没有这个标记,命令 git status 将告诉你更多的提示与上下文欣喜。 以下便是同样状态下,有跟没有 -s 参数的输出对比。简短的输出如下:

$ git status -s
AM README
A  hello.rb

而同样的状态,详细的输出看起来是这样的:

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to u
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值