一、创建版本库
Git中,版本库(.git目录)与工作目录并排存放在同一个目录中。
首先创建一个存放项目源代码的目录,然后把这个目录初始化为版本库。
命令如下:
mkdir learnGit
cd learnGit
git init
之后这个版本库就可以用来记录和跟踪项目代码了。
二、代码修改
创建一个index.html文件,跟踪版本。
1)把文件添加到版本库中
要想Git跟踪这个文件,必须让它知道这个文件;
首先使用git add 命令把文件添加到版本库的暂存区,然后使用git commit命令提交到版本库。
git add index.html
git commit -m "add in hello world HTML"
文件或文件列表可以作为git add命令的参数。
git commit命令创建一个提交记录,提交记录存储在版本中的历史记录,每提交一次创建一个记录,并标记出代码的演进。
Git把提交者的姓名和邮件地址,以及提交留言,都添加到提交记录中。
参数-m作用是,告诉Git本次提交的提交留言为add in hello world HTML。
会输出:[master (root-commit) 8f4be3a] add in hello world HTML
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 index.html
2)查看提交记录
命令:
git log
通过这个命令可以看到提交相关信息。
输出如下:
commit 8f4be3a27aef634e237ea2708a02dead69274523
Author: GongYan <66666@qq.com>
Date: Thu Jul 30 14:48:53 2015 +0800
add in hello world HTML
第一行显示提交名称,该名称是Git自动产生的SHA-1码,Git通过它来跟踪提交;
git log 输出的提交名称的前七位字符和命令git commit输出的相同,git commit显示的是提交名称的缩写;
第二行显示提交者的信息;
第三行是提交日期;
最后是提交留言。
三、在项目中工作
把文件添加到版本库中后,就可以跟踪文件了。
在index.html中进行修改后可以通过git status命令查看工作目录的状态。
1)查看工作目录状态
git status
输出:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")
输出结果表明Git监测到修改,但是没有暂存。
修改过的文件在Changed but not updated下面列出来,如果要提交,需要暂存修改;暂存修改,以准备把修改提交到版本库。
Git中有三个地方可以存放代码:工作目录、暂存区、版本库。
暂存区,暂存区是工作目录与版本库之间的缓冲区,暂存区中存放的是准备提交到版本库中的修改。
2)把版本库中修改后的文件加入暂存区
这时候同样使用git add命令,这时候它告诉Git要跟踪的是一个新的修改而不是新文件。
命令:
git add index.html
执行后没有输出,此时再次执行git status输出如下:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Changed but not updated变为Changes to be committed,提示为待提交。
3)提交留言
把修改后的文件加入暂存区后,可以提交留言,通过git commit。
git commit -m "add something to index" -m "allows for a more semantic document."
这里的git commit使用了两个-m参数,Git可以接受任意多次提交留言的输入,每次另起一段。
通过git log来浏览提交的留言。
git log -1
输出如下:
commit 86e6bb88e6198275bd29ce6fa880ae82064f1322
Author: GongYan <669338805@qq.com>
Date: Thu Jul 30 19:04:19 2015 +0800
add something to index
allows for a more semantic document.
这里引入了git log的一个新参数-1,可以通过改变数字来限制命令git log输出的提交条目的个数。
四、理解并使用分支
分支是维护项目中并行历史记录的方法。
从Git工具的角度讲,想怎么用分支就怎么用,但是在实际应用中,需要根据具体情况来确定。
有两种分支比较有用:用来支持项目的不同发布版本的分支;以及用来支持一个特定功能的开发的分支。
1)创建一个新分支
创建分支的命令是git branch,该命令需要两个参数:新分支名称和父分支名称。新创建的分支基于已经存在的父分支。
git branch dev master
该命令从主分支上创建一个叫dev的分支,主分支是Git默认的分支。
在之前创建的index.html文件后加入新的一行,然后利用git commit提交到版本库。
git commit -a -m "add new line"
命令git commit 带了上一个-a参数,它告诉Git提交全部修改过的文件。
现在主分支上是最新的修改,而dev分支上还是未修改过的。
2)切换分支
切换分支使用git checkout命令。
切换到dev分支上:
git checkout dev
命令执行后输出:
Switched to branch 'dev'
上面提示切换到分支dev中。
此时打开文件index.html文件查看,之前在主分支添加的内容不见了。
五、发布版本
1)标签的使用
给Git中的代码打标签,意味着在版本库的历史中标记出特定的点,这样将来就容易找到相应版本的代码。
打标签使用git tag命令。
git tag 1.0 dev
以上命令中的两个参数分别指明了标签的名称和希望打标签的点,它们分别为1.0和dev分支的末梢(所对应的版本,或者说所对应的提交)。
用不带参数的命令git tag可以查看版本库中的标签列表。
[gongyan@gongyan learnGit]$ git tag
1.0
[gongyan@gongyan learnGit]$
目前只显示了刚刚打过的标签1.0。
2)变基命令
变基命令git rebase,把一条分支上的修改在另一条分支的末梢重现。
现在有两条分支上有不同的提交,通过变基命令进行整理。
先切换回主分支:
git checkout master
然后运行命令git rebase:
git rebase dev
后面跟一个参数,希望变基到哪条分支的末梢,就使用哪条分支名称做参数。
输出:
Current branch master is up to date.
变基的意思是:改变分支的基底,假定有分支A和分支B,它们的分叉点是版本Y,Git的实现方法是,如果站在分支B上告诉Git”我要变基到A的末梢“,那么Git会把从版本Y到分支B的当前末梢之间的所有提交,顺序加到分支A的末梢上去,生成新的分支B及其末梢,而分支A及其末梢则没有任何变化。
3)删除分支
删除分支使用git branch命令,需要加上-d参数。
git branch -d dev
输出如下:
Deleted branch dev (was 86e6bb8).
表示删除分支dev。
4)通过已有标签创建分支
可以从打标签的地方创建一条分支。
使用命令git branch。
git branch dev 1.0
命令最后改成发布的标签名称。
5)为代码发布创建归档文件
通常情况下,将标签对应的版本内容打包成一个tar或者zip包就可以了。
可以利用git archive命令进行归档处理。
git archive --format=tar --prefix=dev-1.0/ 1.0 | gzip > dev-1.0.tar.gz
该命令有三个参数,第一个,--format指明要产生tar格式的输出;第二个,--prefix指明包中所有的东西都放到dev-1.0/目录下。
最后1.0指明需要归档的标签名称。
命令git archive也可以产生zip文件,命令如下:
git archive --format=zip --prefix=dev-1.0/ 1.0 > dev-1.0.zip
Git可以与远程版本库打交道,分享本地的工作成果,或者复制其他的版本库到本地。
可以使用git clone克隆远程版本库。
git clone git://github.com/GongYan/test.git test
命令git clone带有两个参数:远程版本库的位置和存放该版本库的本地目录。