Git实战教程(上)

Git实战教程--基本用法(上)
一、Git的初始化
在使用git进行代码管理之前,首先要对git进行初始化。
1)Git配置
使用Git的第一件事就是设置你的名字和Email,这些都是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用git config命令进行配置:
$git config --global user.name "Scott chacon"
$git config --global user.email "[email protected]"

执行了上述命令后,会在家目录(/home/shiyanlou)下建立一个叫.gitconfig的文件(该文件为隐藏文件)需要使用ls -al查看,内容一般如下,可以使用vim或cat查看文件内容
$cat ~/.gitconfig
[user]
email = [email protected]
name = scott chacon

上面的配置文件就是Git全局配置的文件,一般配置方法是git config --global <配置文件> <配置的值>
如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱),你可以在项目中使用git config命令不带--global选项来设置。这会在你当前的项目下创建.git/config,从而使用针对当前项目的配置。

二、获得一个git仓库
1)clone一个仓库
为了得到一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL)。Git能在许多协议下使用,使用Git URL可能以ssh://,https://,git://
我们在GitHub.com上提供了一个名字为gitproject的供大家测试的公有仓库。
$git clone https://github.com/shiyanlou/gitproject

clone操作完成后,会发现当前目录下多了一个gitproject文件夹,这个文件夹里的内容就是我们刚刚clone下来的代码。

2)初始化一个新的仓库
可以对一个已存在的文件夹用下面的命令让它置于Git的版本控制管理下,创建代码目录project
$cd /home/shiyanlou/
$mkdri project

Git输出:
Initialized empty Git repository in /home/shiyanlou/project/.git/

通过ls -al命令会发现project目录下会有一个名叫.git的目录被创建,这意味着一个仓库被初始化了。可以进入到.git目录查看下有哪些内容。

三、正常的工作流程
1)正常的工作流程
git的基本流程如下:
1.1. 创建或修改文件
1.2. 使用git add命令添加新创建或修改的文件到本地缓存区(Index)
1.3. 使用git commit命令提交到本地代码库
1.4. (可选,有的时候并没有可以同步的远端代码库)使用git push命令将本地代码库同步到远端代码库

#进入刚才创建的project目录,分别创建文件file1、file2、file3
$cd project
$touch file1 file2 file3
#修改文件,可以使用vim编辑内容,也可以直接echo添加内容
$echo "test" >> file1
$echo "test" >> file2
$echo "test" >> file3

#此时可以使用git status命令查看当前git仓库的状态
$git status

#可以发现,有三个文件处于untrack状态,下一步就需要用git add命令将它们加入到缓存区(Index)
#使用git add命令添加新文件
$git add file1 file2 file3

#再次执行git status就会发现新的变化
#现在为commit做好了准备,可以使用git add命令再加上--cached参数,看看缓存区中有哪些文件被修改了。
进入git diff --cached界面后需要输入q退出
$git diff --cached

#如果没有--cached参数,git diff会显示当前你所有已做的,但没有加入到索引里的修改。如果要进一步的修改,那就继续,做完后把新修改的文件加入到缓存区中。
#当有新建、修改的文件都被添加到了缓存区,就要使用git commit提交到本地仓库
$git commit -m "add 3 files"

#需要使用-m添加本次修改的注释,完成后就会记录一个新的项目版本。
#除了用git add命令,还可以用下面的命令将所有没有加到缓存区的修改也一起提交,但-a命令不会添加新建的文件
$git commit -a -m "add 3 files"

#再次输入git status查看状态,会发现当前的代码库已经没有待提交的文件了,缓存区已经被清空。
#需要注意的是如果是修改文件,也需要使用git add命令添加到缓存区才可以提交。如果是删除文件,则直接使用git rm命令删除后会自动将已删除文件的信息添加到缓存区,git commit提交后就会将本地仓库中对应文件删除。
#这时如果希望将本地仓库关联到远端服务器,可以使用git remote命令,不同于刚才的git clone命令,直接将远端的仓库克隆下来,当前使用的是git init初始化的本地仓库,所以需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己仓库地址)

$git remote add origin https://github.com/yingque/novel_insert.git
#git remote add命令用于添加远程主机,origin是主机名,此处可以自定义,不一定非要使用origin而https://github.com/yingque/novel_insert.git,是远程仓库地址,需要替换为自己的远程仓库地址。

#这个时候如果本地的仓库连接到远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器
#需要输入仓库对应的用户名和密码
$git push origin master

四、分支与合并
Git的分支可以让你在主线(master分支)之外进行代码提交,同时又不会影响代码库主线。分支的作用体现在多人协作开发中。
1)分支
一个Git仓库可以维护很多开发分支。现在来创建一个experimental的分支
$git branch experimental

#运行git branch命令可以查看当前的分支列表,以及目前的开发环境处在哪个分支上
$git branch
 experimental
*master

#experimental分支是刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你当前工作在哪个分支下,输入
git checkout <分支名> 可以切换到其他分支
$git checkout experimental
 Switch to branch 'experimental'

#切换到experimental分支,切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回“master”分支
$echo "update" >> file1 #修改file1文件
$git status #查看当前状态
$git add file1 #添加并提交file1的修改
$git commit -m "update file1"
$cat file1
$git chechout master #切换到master分支

#查看file1中的内容会发现刚才做的修改已经看不到了。因为刚才的修改时再experimental分支下,现在切换回了master分支,目录下的文件都是master分支上的文件了。

#现在可以在master分支下再做一些不同的修改:
$echo "update again" >> file2 #修改文件file2
$git status
$git add file2 #添加并提交file2的修改
$git commit -m "update file2 on master"
$cat file2

#这时,两个分支就有了各自不同的修改,分支的内容都已经不同,如何将多个分支进行合并?
可以通过git merge命令来合并experimental到主线分支master
$git checkout master
$git merge -m 'merge experimental branch' experimental #将experimental分支合并到master

#-m参数仍然需要填写合并的注释信息
#由于两个branch修改了两个不同的文件,所以合并时并不会有冲突,执行上面的命令后合并就完成了
#如果有冲突,比如两个分支都改了一个文件file3,则合并时会失败

#首先在master分支上修改file3文件并提交
$git checkout master
$ehco "master:update file3" >> file3
$git commit -a -m "update file3 on master"

#然后切换到experimental,修改file3并提交
$git checkout experimental
$echo "experimental:update file3" >> file3
$git commit -a -m "update file3 on experimental"

#切换到master进行合并
$git checkout master
$git merge experimental

#合并失败
#合并失败后先用git status查看状态,会发现file3显示为both modified,查看file3内容会发现
$cat file3

#可以看到冲突的内容都被添加到了file3中,使用vim编辑这个文件,去掉git自动产生标志冲突的<<<<<<等符号后,根据需要保留。然后使用git add file3和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程。
$vim file3
$git add file3
$git commit -m 'merge file3'

#当完成合并后,不再需要experimental时,可以删除
$git branch -d experimental
#git branch -d只能删除那些已经被当前分支合并的分支,要强制删除某个分支的话需要用git branch -D

2)撤销一个合并
如果觉得合并后的状态是一团乱麻,想把当前的修改都放弃,可以用下列命令
$git reset --hard HEAD^
$cat file3 #查看file3内容,已经恢复到合并前的master上的文件内容

3)快速向前合并
通常一个合并会产生一个合并提交(commit),把两个父分支里的每一行内容都合并进来。但是如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git就会执行一个“快速向前”(fast forward)操作,git不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。

五、git日志
1)查看日志
git log命令可以显示所有的提交(commit)
$git log

2)日志统计
如果用--stat选项使用'git log',它会显示在每个提交(commit)中哪些文件被修改了,这些文件分别添加或删除了多少行内容,这个命令相当于打印详细的提交记录。
$git log --stat

六、小结
git config:配置相关信息
git clone:复制仓库
git init:初始化仓库
git commit:提交
git branch:分支相关
git checkout:切换分支
git add:添加更新内容到索引
git diff:比较内容
git status:获取当前项目状况
git merge:合并分支
git reset:恢复版本
git log:查看日志

猜你喜欢

转载自blog.csdn.net/zhaocen_1230/article/details/80562951