git生存手册/git入门基本教程

本文针对git初学者入门之用,目标为“快速的在git世界里生存下来”。当然,生存下来是不够的,严重推荐git-scm上教程深入学习,另外git客户端、开发库、部署方案等参看git wiki

本文主要以命令行操作为主。

git安装,不多说。

linux或mac os x下,应该已经安装过了,如没有请通过yum/apt-get等安装。windows下可以使用git-scm的win32版本,自带命令行;推荐在cygwin下的git。可参考 git-scm下载合适的版本

第0步,基础知识。

git是分布式、去中心化的。通俗的说,git项目里的就是每个人都有所有版本的副本;不要服务器也能工作。

几乎所有的git的操作,都被集成到git 这个命令下,如 git add, git branch, git commit, git push 等,可以运行 git --help 浏览一下。

第一步,配置个性化的名字

运行下面的命令,配置一下你的名字与邮箱地址。注意花括号只是为了看起来方便,实际执行不要带它们,除非你的名字带花括号。但强烈不建议使用特殊符号,以免为自己挖抗!

git config --global user.name {你的名字}
git config --global user.email {你的邮箱地址}

第二步,忘掉“服务器”的概念,并搞个git库。

先不考虑服务器;尤其如果有svn使用经历的话,先忘掉这个概念。因为git是“去中心化”的,即不要服务器就可以工作。所以一开始我们先简化掉不必要的东西,有助于快速入门。

打开命令行。windows下使用git-scim者,可以在某个文件夹里点右键-Git Bash (?)。切换到一个空目录里。下面以/cygdrive/e/git_repo/foobar/ 目录为例(cygwin的目录风格)

执行命令 git init ,你将看到类似下面的提示消息

Initialized empty Git repository in /cygdrive/e/git_repo/foobar/.git/

看到了吧,git在本目录下创建了一个子目录 .git 这就是本地的git仓库。受git控制的文件的所有历史版本都会存储在这里面;本git仓库的配置也在里面。有兴趣可以到里面随便看看。有探索精神的童鞋注意了,不要指望在里面按文件找到你的文件;请在入门后了解一下git原理。

第三步,熟悉一下git环境。

回到前面创建的目录(注意不要跑到.git子目录里),运行 git status,你将看到类似如下的消息:

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

简单说明一下,On branch master  -> 你在 master 分支(branch)下

Initial commit  -> 当前是初始提交。刚刚初始化的一个版本库,即是空的 (别想歪,没字)。

nothing to commit (create/copy files and use "git add" to track)  ->  接上行“初始提交” 但没有任何东西待提交(创建或拷贝进来一些文件并使用git add 追踪它们)。

[提示] git status这个命令非常常用。

第四步,搞几个文件,纳入git版本库。

按照git的提示,随便搞几个文本文件,最好小一点,只有几行。从别的地方拷来也行,在这里新建也可以。

假设创建了文件  readme.txt ,内容如下3行,最后一行是空行

this is a text file
line 2 aaa
line 3 bbbbb

再运行一下git status

On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        readme.txt

nothing added to commit but untracked files present (use "git add" to track)

消息变了,大意是说:

有了未追踪的文件(Untracked files):
(使用 git add <文件名> ... 把你需要追踪的文件加入进来。)
readme.txt

现在还没有添加到待提交列表里,但是有未追踪的文件,使用git add 追踪它们.

有点啰嗦.....

git 里,文件被追踪(track),就是被纳入git版本控制。每次提交(commit)就是每一次的版本变更。

那我们就按提示添加文件到追踪列表吧.

git add readme.txt

咦,没有任何消息?是的,再运行git status看看。多了如下的部分,不细讲了

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   readme.txt

第五步,首次提交一个版本

运行命令 git commit -m "first commit, file readme.txt"

本行命令有点小麻烦,因为带了个 -m 参数,后面双引号里是一段简短的说明,为本次提交加点注释,方便以后查阅。git默认强制要求每次提交都要带说明。注释随便写,但强烈建议有概括性,简洁直观的文字说明,会给你及你的团队带来帮助。

[本步下面的内容非必须,但还是建议了解一下] 如果不带 -m 参数,git默认会给你一个vim 的编辑器,并给出一些有意义的提示文字,你可以在这里写注释,然后保存退出,git会把你写的内容当作注释。

vim编辑器是神器,但入门有门槛。对于 git 提交来说,只要死记下面的步骤即可:

默认是不是打字的,要先敲一下 i 键(注意是小写状态),即可以正常输入文字。

写完确认无误后,按 Esc 键,按一次或N多次都行,如果不确定是否真的按下过,那就多几次,反正没有副作用。然后击键:

:wq

然后按回车。提交就完成了,将大概如下所示的消息。

$ git commit
[master (root-commit) fbc00df] first commit, file readme.txt
 1 file changed, 3 insertions(+)
 create mode 100644 readme.txt

啰嗦 一下,前面保存注释用的是三个键,冒号、w、q,然后回车。

第六步,做下修改,再提交一个版本

随便修改一下前述文件,然后运行 git status ,消息大概如下 :

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

说得很明白,readme.txt这个文件有修改,你可以通过 git add 添加到待提交列表。这个“待提交列表”有个名字“暂存区域”。

消息里还说,可以通过git checkout -- <file> 丢弃你做的修改。这点下一步再尝试。

执行git add readme.txt ,然后执行 git commit -m "add a new test line",完成本次提交。

第七步,体验丢弃修改功能

随便在readme.txt里修改点东西,然后git status,看到git认出来 了文件的修改。消息从略

然后执行  git checkout -- readme.txt

注意命令里的两个连字符(--) ,其前后都是有空格的。

然后再执行git status,消息如下:

$ git status
On branch master
nothing to commit, working directory clean

查看readme.txt文件,会发现你做的修改确实已经没了,恢复为上次提交时的内容。

当然,这个命令只能恢复到上次提交时的版本,要想回复到更早的版本,继续下面

第八步,历史长廊

先随便做几次提交吧,可以多建几个文件并加到追踪里。

差不多了,就通过git log 查阅提交历史,大概如下

$ git log
commit 9ab41ac68ae6fe8e0e3ccc0013af91e5d3aa0ca9
Author: fengyqf <fengyqf@gmail.com>
Date:   Thu Nov 20 21:15:55 2014 +0800

    remove a line

commit f72675d78dfa6c5a7c0a9e742fb3e5a19d9d62d7
Author: fengyqf <fengyqf@gmail.com>
Date:   Thu Nov 20 21:15:28 2014 +0800

    add serival lines

commit e063544aacdff53f4d971179720bd1f83f1f9634
Author: fengyqf <fengyqf@gmail.com>
Date:   Thu Nov 20 21:13:48 2014 +0800

    append a line

commit fbc00dfcc90e395aa0491a4aaaca7659d74b9d5d
Author: fengyqf <fengyqf@gmail.com>
Date:   Thu Nov 20 20:41:47 2014 +0800

    add some file

这里按时间倒序列出最近的提交。如果你提交次数较多,你会看到屏幕最后一行行首是一个冒号,紧跟着光标。这时,你可以按空格键查看下一屏,或 b 键返回上一屏,或Esc键退出回到命令行(shell)下。

看上面的日志,每次提交一节,每节首行是 commit 后面跟着本次提交的ID,这段id是即是版本号,当然它对人类不太友好。第二三行是提交人、时间,然后空一行接着是本次提交注释文字。

如果我们的某个文件被玩坏了,需要恢复到历史上的某个版本,那就git checkout 出来

假设需要恢复上上次提交

commit f72675d78dfa6c5a7c0a9e742fb3e5a19d9d62d7

执行 git checkout f726 readme.txt

其中 f726 是该次提交的ID前4个字符,也就是,通常我们不需要写完整的ID就可以指定某次提交。当然,你使用前5个字符或前6个或更多,都是可以的。

提交ID后台跟需要检出的文件名。注意一定要带这个“文件名”的参数,不然会出乱子:下次提交后,在该版本后的版本将会被你抹掉!

看到了吧,文件readme.txt 历史版本又回来了。

差点忘了,可以通过git checkout --help查阅帮助,其它命令,也可以同样查帮助。帮助内容自己看,这里不讲了。

第九步,分支

git最强悍的功能之一,就是它的分支,比svn彪悍得多!

是否注意到前面所说的“master”分支,这是默认分支,我们可以创建一个新的分支。

git branch -b

第十步,比较

git diff

第十一步,分支合并

git merge

第十二步,checkout --patch

git checkout --patch

第十三步,远程仓库

git remote add

git push

git fetch

git pull

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据