您的位置:首页 > 其它

Git的详细使用

2017-08-17 15:24 120 查看
GIt简介

Git是一个免费的开放源码的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 易于学习,具有 闪电般快速的性能,占地面积小。它超越了像Subversion,CVS,Perforce和ClearCase这样的SCM工具,具有便宜的本地分支,便利的分段区域和多个工作流等功能

1.软件安装

(1)先用命令 rpm -qa|grep -i git 查看一下我的机器是否安装了 git



此处grep命令使用-i表示不区分大小写,可以看到有git包还有其他git字符包,说明已经安装了git,用git --version查询git版本。

(2)若没有查询到git已安装,使用 centos的可以用 yum 来安装 git, ubuntu用 apt-get 就可以。我的机器是centos,直接使用sudo yum -y install git-all.i386就可以了

2.Git初学习

(1)在使用 Git 之前,需要先把自己介绍给Git,因为它要求每个人在向仓库提交数据时,都应当承担一定的责任。要向 Git 进行自我介绍,请使用以下命令:

$git config –global user.name “Your Name”
$git config –global user.email “you@example.com”
照例执行:



(2)建立项目仓库





在git目录下,git init 命令用于初始化当前所在目录的这个项目,shell 返回的提示表明已经建立了一个.git 隐藏目录来保存这个项目目前的进展信息。我们可以用 ls -a 看到它。
git add .这个命令要求 git给我目前的这个项目制作一个快照 snapshot(快照只是登记留名,快照不等于记录在案,git管快照叫做索引 index)。快照一般会暂时存储在一个临时存储区域中。

git commit 命令可将索引提交至仓库中,这个过程称为提交,每一次提交都意味着版本在进行一次更新。在输入 git commit 并按回车时会转到一个 vi 窗口,要求开发者输入这次提交的版本和开发信息。意思就是说这个项目目前的版本是多少,已经完成了哪些功能,还有哪些功能是需要以后完成的等等信息。对于简短的版本更新信息,可以使用 git commit 的“-m”选项,如下:

$ git commit -m "你的版本更新信息"
(3)项目文件的添加及修改

首先添加了一个hello.c文件,通过git add hello.c 和 gi commit 提交到仓库

[weiming@Huangweiming git]$ ls
hello.c
[weiming@Huangweiming git]$ cat -n hello.c
14  #include<stdio.h>
15
16  int main(int argc, char **argv)
17  {
18
19      printf ("hello\n");
20      return 0;
21  }
[weiming@Huangweiming git]$ git add hello.c
[weiming@Huangweiming git]$ git commit -m "create a hello.c by huangweiming"
[master (root-commit) 83d2f06] create a hello.c by huangweiming
1 files changed, 21 insertions(+), 0 deletions(-)
create mode 100644 hello.c
接着对hello.c这个文件进行修改,在printf语句前添加一行:printf ("Version:0.01\n");程序变成这样



[weiming@Huangweiming git]$ git diff --cashed

 git diff –cached 是用来查看 index file 和仓库之间代码的区别的。由于我们目前只是在 working tree 里做了修改,还没有报告给 index file,所以使用此命令显然会输出空信息。而如果省略–cached 选项的话,就是比较 working tree 和index file 的区别,由于我们的确在 working tree 里做了修改,所以使用 git diff 后会输出修改信息。(这里的working
tree也就是hello.c这个文件)



使用 git diff 了解了不同之后,还可以使用 git status 命令来获取整体改动的信息:



可以看到提示信息“changed but not updated”,就是说 git 发现你有已经修改了但还未 git add 的内容。

如果 git 提示说“Changes to be committed”,那就是表明 git 发现了你已经 git add 但还未 git commit 的内容

[weiming@Huangweiming git]$ git add hello.c
这句是要告诉 git,我已经修改了hello.c文件,你(指git)去检查一下。当然,如果你新增加了一个文件,比如
new.c,也需要在这里先执行
git add new.c 告诉
git。 接着只要commit提交就可以了
[weiming@Huangweiming git]$ git commit -m "add a line by huangweiming"
[master 4c58fe5] add a line by huangweiming
1 files changed, 1 insertions(+), 1 deletions(-)
到此,修改工作就完成了,可以通过git log查看开发日志



可以看到我们commit时所提交的信息。可以用git log --pretty=oneline
减少输出信息

[weiming@Huangweiming git]$ git log --pretty=oneline 

4c58fe5fcf63c8ab28ff276a0b3bc9f86248b296 add a line by huangweiming

83d2f068b4cab80ef2cce43677aadb64b9599efb create a hello.c by huangweiming

如果你觉得 git log 给出的信息太单薄了,可以使用 git log -p,这样 git 不但会给出开发日志,而且会显示每个开发版本的代码区别所在。

小结:

如果修改了项目代码,先 git add 你修改过的文件,再 git diff 并 git status 查看确认,然后 git commit 提交,然后输入你的开发日志,最后 git log 再次确认。

关于git add:只要是文件有改动,无论是这个文件被修改的还是被新加入的,都可以使用 add 来进行登记。

现在教给你一个偷懒方法,那就是 git commit -a,这个命令可以直接提交所有修改,省去了你 git add 和 git diff 和 git commit 的工序,可谓一条龙服务。但是,此处有一点应该注意,那就是 git commit -a 无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文件夹,那么就要老老实实的先 git add xxx,再 git commit 了。

3.Git分支管理

Git 最为世人称道的就是它那强大的项目分支管理功能,现在较为流行的版本控制系统,诸如 CVS、SVN 等,虽然也提供了项目分支管理功能,但是可用性极低。

对于 Git 而言,管理多个项目分支如探囊取物耳。现在,我要加入日期显示动能到hello.c中,但不保证这个功能一定能够实现。这个时候就可以用
git branch命令创建一个分支



git branch testbranch创建了一个testbranch分支,git branch列出所有已存在的分支。前面带“星号”的分支表示当前所在分支。git checkout testbranch切换到testbranch分支,接着对hello.c进行工作。



<
acd2
/p>
修改后hello.c的代码,运行测试:

[weiming@Huangweiming git]$ gcc hello.c
[weiming@Huangweiming git]$ ./a.out
Year:2017
Month:8
Day:18
Hour:16
Min:15
Second:38
Version:0.01
hello
说明此时在分支上进行的工作内容是正确的,接着就是提交程序到分支项目了

[weiming@Huangweiming git]$ git commit -a

[testbranch 9a2fe5a] add date by huangweiming

 1 files changed, 11 insertions(+), 1 deletions(-)

然后就可以切换到 'master'了

[weiming@Huangweiming git]$ git checkout master

Switched to branch 'master'

在master上,无论使用 log 或是 status 命令都无法看到刚才在 testbranch分支所进行的工作。

现在,我们在master上在做一些修改,进而体会git处理分支的能力。在hello.c中,在printf语句前添加一行:printf ("Version:0.02n");程序变成这样



[weiming@Huangweiming git]$ git commit -am "add a new line by huangweiming"

[master 9c6cadd] add a new line by huangweiming

 1 files changed, 1 insertions(+), 0 deletions(-)

提交成功后,下面就来合并分支了(猜猜会发生什么?)



报错了!上述信息之意是:尝试合并 hello.c文件的改动发生了冲突,自动合并失败,请用户手动修复冲突然后将结果提交到仓库中,查看master中hello.c文件,看到以下内容



以一串 < 开头的字串表示 master 的当前项目版本对 hello.c的修改结果,而以一串 > 开头的字串表示 testbranch 的当前项目版本对 hello.c的修改结果。中间用了一串= 号将二人修改结果隔开。一旦理解了版本冲突的表示格式,master就很容易地根据现实情况将合并冲突问题解决掉,现在的冲突是git不知道是把printf这行放日期时间显示前面还是后面,现在我们手动修改mster中hello.c的内容,修改为

[weiming@Huangweiming git]$ vim hello.c 



解决冲突后再次提交!

[weiming@Huangweiming git]$ git commit -am "This is the new version by huangweiming"

[master 5bb01f9] This is the new version by huangweiming

[weiming@Huangweiming git]$ 

好了,成功完成合并分支并解决合并冲突!

当一个分支检查无误并且与 master 分支成功合并完毕后,那么这一分支基本上就没有存在的必要性了,可以删除掉

weiming@Huangweiming git]$git branch -d testbranch


注意,git-branch 的 -d 选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想不问青红皂白地删除一个分支,可以使用 git-branch 的-D 选项。

先写到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git git分支管理