Centos7-Git安装及使用git
作者:互联网
来源:Centos7 yum安装git_王非雨的技术博客_51CTO博客_git安装
3、Git和SVN的区别
Git是分布式,SVN是集中式
Git的每个历史版本存储的是完整的文件,而SVN只是存储文件的差异
Git可以离线完成大部分操作,SVN不可以
Git有着更优雅的分支和合并实现
Git有更强的撤销修改和修改版本历史的能力
Git速度更快,效率更高
4、Git和Github的关系
Git是一个分布式的版本控制系统
GitHub是一个基于Git的项目托管平台,它提供了web界面,我们可以在上面创建资源仓库来存放你的项目,在本地或服务器创建一个资源仓库通过shell命令或图形用户界面可以和远端的GitHub进行项目同步更新,实现对项目的管理。
安装环境:
系统:Centos7-3.10.0-514.el7.x86_64
Git:git-1.8.3x86_64
关闭防火墙并禁止开机自启
systemctl stop firewalld.service
systemctl disable firewalld
关闭selinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux
重启 reboot
注:默认使用yum安装git目前最高版本就到1.8,如果想安装更高或者更新的git版本,可以了解一下 Git源码安装
二、Git的安装
1、查看系统是否安装git
2、yum安装git yum -y install git
3、设置用户名和邮箱
1)设置用户名 git config --global user.name 设置用户名
2)设置邮箱地址 git config --global user.email 设置邮箱
注:该用户名、邮箱应为Github网站注册填写的用户名及邮箱
3)查看git配置 git config --list
4)删除用户信息(如果有多个用户,想删除指定的用户可以使用)
git config --global --unset user.name 用户名
4、创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,递归创建一个空目录:
mkdir -p /opt/git
5、通过git init命令把这个目录变成Git可以管理的仓库
6、用命令git add告诉Git,把文件将文件提交到暂存区。(自己随意写一个txt文件)
1)编写一个文件 vi /opt/git/nihao.txt
注:这个文件一定要放在/opt/git/目录下才能找到(git的子目录也行)
2)将文件提交到暂存区 git add 文件名 (在同路径下执行)
git add nihao.txt
3)查看当前仓库文件状态(没有提交和新增文件,但有跟踪到新文件) git status
4)将文件提交到git仓库 git commit -m “ wrote a new file”
注:简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。此命令一定要在上一条命令git add执行完,继续执行,否则可能提交失败。
5)再次查看仓库状态后,可以看见无任何内容 git status
注:所有新增或更改的文件都会先放在暂存区,但确认无误时,在使用commit提交(这样的好处在于,如果更改错误随时可以回退)
7、为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
1)同时创建三个文件 file1.txt file.2txt file3.txt
2)都提交到暂存区 git add (file1.txt、file.2txt、file3.txt)
三、时光穿梭机
1、版本回退
1)修改nihao.txt文件 vi nihao.txt
2)将修改的nihao.txt文件提交到git版本库 git commit -m “more a file”
注:当前有两个nihao.txt版本,分别是wrote a file和more a file。当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。
版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,如果是上千行输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:
注:友情提示看到的每个文件前一大串字母加数字,这个是commit id版本号。
3)将nihao.txt回退到wrote a file版本 git reset --hard HEAD^^
注:首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
//查看版本 git log
4)到这一步可能有的童鞋就会问了?最新的版本more a file或者wrote three new file第二版本已经看不到了,我想再回到这其中的一个版本肿么办?办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到其中一个版本的commit id号然后就可以直接回到那个版本。(本文回到最新的版本more a file)
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。再小心翼翼地看看nihao.txt的内容:
5)如果现在你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到wrote a file版本时,再想恢复到more a file版本,就必须找到more a file版本的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
注:这样是不是解决了你的担忧呢?这样也就不用害怕有哪个版本找不回来了!
2、工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
先来看名词解释。
1)工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的/opt/git/文件夹就是一个工作区:
2)版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
3)因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。对nihao.txt做个修改,比如加上一行内容:
然后,在工作区新增一个666文本文件(内容随便写)先用git status查看一下状态:
Git非常清楚地告诉我们,nihao.txt被修改了,而666文本还从来没有被添加过,所以它的状态是Untracked。现在,使用两次命令git add,把nihao.txt和666都添加后,用git status再查看一下:
现在,暂存区的状态就变成这样了:
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
现在版本库变成了这样,暂存区就没有任何内容了:
3、管理与修改
1)修改nihao.txt文件 vi nihao.txt
2)将修改的nihao.txt文件添加到暂存区 git add nihao.txt
3)继续修改nihao.txt文件 vi nihao.txt
4)这次不添加到暂存区,直接提交 git commit -m “four new file”
是不是发现第二次修改没有被提交?我们修改操作:(第二次修改没有添加到暂存区)
第一次修改 -> git add -> 第二次修改 -> git commit
当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
用git diff HEAD – nihao.txt命令可以查看工作区和版本库里面最新版本的区别:
注:由上截图可看出第二次修改,并没有被提交,那么在这里也再次警告大家,每次修改,如果不用git add到暂存区,那就不会加入到commit中。
4、撤销修改
撤销修改方式:
方式一:文件修改后还没有被放到暂存区,撤销修改就能回到版本库未修改前状态;
方式二:文件修改后添加到暂存区,撤销暂存区的修改就回到添加到暂存区后的状态,需要继续执行撤销文件操作,才能完全撤销成功;
1)查看原nihao.txt文件内容 cat nihao.txt
//修改nihao.txt文件并查看 vi nihao.txt
//撤销nihao.txt文件修改 git checkout 文件名
//查看nihao.txt文件 cat nihao.txt
注:以上截图验证了使用方式一撤销修改成功。
2)查看原nihao.txt文件内容 cat nihao.txt
//修改nihao.txt文件并查看 vi nihao.txt
//将修改的nihao.txt文件提交到暂存区 git add nihao.txt
//撤销已提交到暂存区的nihao.txt文件的修改 git checkout nihao.txt
注:已提交到暂存区的修改过的文件,不能用git checkout命令撤销,如果想撤销,那么也不是没有办法,需要两个命令结合使用,如下:
//先取消nihao.txt文件暂存区的更改 git reset HEAD 文件名
//在执行撤销文件操作 git checkout nihao.txt
5、删除文件
删除方式:
(1)误删除工作区的文件
(2)直接删除不需要的文件
1)误删除工作区文件 rm -rf nihao.txt
//查看仓库状态 git status
//撤销文件删除操作 git checkout nihao.txt
注:以上操作将误删除的文件已经还原了。
2)从仓库中删除nihao.txt文件 git rm 文件
//将删除操作提交到仓库 git commit -m “delete nihao.txt”
//查看文件是否被删除 ls
//再次查看仓库状态 git status
注:查看状态,就是查看暂存区里的东西如果已经提交,则如上截图为空。
四、远程仓库
1、在本地生成ssh key
ssh-keygen -t rsa -C “邮箱地址”
2、github中添加公钥
注:github中添加服务器公钥完成!
3、在GitHub中创建一个远程仓库
注:复制远程仓库地址https://github.com/W-F-Y/test.git
4、本地clone远程仓库
git clone https://github.com/W-F-Y/test.git
注:如出现:“fatal: HTTP request failed”,则可能是git版本太低,需要安装更高版本。
如出现:"fatal: unable to access ‘ https://github.com/Paintinge/Test.git/’: SSL connect error ",需更新系统软件包,然后重启。
5、本地修改代码之后提交到远程仓库
1)新建代码文件 vi remote_data.txt
2)将文件添加到暂存区 git add remote_data.txt
//提交到远程仓库 git commit -m “第一个远程文件”
//查看远程仓库状态,提示需提交到远程仓库 git status
//在本地仓库添加一个远程仓库
git remote add git(远程仓库标识名称可自定义) https://github.com/W-F-Y/test.git
//将本地仓库内容提交到远程仓库master分支(第一次-u必须使用,之后提交操作可以忽略),注意输入用户名、密码。 git push -u git master
//查看GitHub上master分支是否有上传的文件
//可以使用命令"git remote rm git"删除关联的远程仓库
//使用"git remote show git"来查看git远程仓库的具体信息
//使用"git remote –v"来查看与当前本地仓库相关联的远程仓库
五、分支管理
1、分支的引入
Master 是主分支,主要作为程序的发布,可以理解为是项目的最终版本,所以不能在master上进行开发,所以应该建立子分支进行开发。
团队中多个人开发一下项目,一同事在开发一个新的功能,需要一周时间完成,他写了其中的50%还没有写完,如果他提交了这个版本,那么团队中的其它人就不能继续开发了,但是等到他全部写完再全部提交,又存在每天进度丢失的风险,这如何是好呢?
对于上面的这个问题,我们就可以用分支管理的办法来解决,一同事开发新功能他可以创建一个属于他自己的分支,其它同事暂时看不到,继续在开发分支(一般都有多个分支)上干活,他在自己的分支上干活,等他全部开发完成,再一次性的合并到主分支上,这样我们既可知道他的开发进度,又不影响大家干活,其他的版本控制器也有分支的概念,只不过切换,删除分支的时候非常慢、效率低下,而git切换或者删除分支几乎就是一瞬间的事
2、查看分支 git branch
3、创建分支 git branch 分支名
4、切换分支 git checkout 分支名
5、创建并切换分支
git checkout -b 分支名称
6、删除分支 git branch -d分支名称
注:如果要删除的分支,正处于当前工作分支,必须切换到其余分支中才能删除。
7、合并分支
1)查看当前所处分支 git branch
2)在当前分支下新建test2.txt文件 vi test2.txt
3)将文件提交到暂存区 git add test2.txt
4)将暂存区内容提交到本地仓库 git commit -m “test2分支新文件”
5)切换到master分支 git checkout master
6)查看test2分支文件 ls
注:不能跨分支查看其他分支的文件
7)将test2分支合并到当前分支 git merge test2
8、分支冲突
代码冲突如何产生的:当在分支上进行开发的时候,难免遇到别的开发人员和我们自己向仓库中提交相同的代码
1)切换到test分支 git checkout test
2)编辑当前分支test.txt文件添加一行456789 vi test.txt
3)添加文件到暂存区 git add test.txt
4)将暂存区内容提交到test分支 git commit -m “test 第二次修改”
5)切换到master分支 git checkout master
6)修改test.txt文件 vi test.txt
7)添加文件到暂存区 git add test.txt
8)将暂存区内容提交到master分支 git commit -m “test 第二次改版”
9)将test分支合并到当前分支 git merge test
注:提示合并冲突,需要手动解决重新合并。
10)查看仓库状态 git status
11)查看合并后文件内容(这时能看见两个分支更改内容,将冲突删除或修改)
12)手动修改当前text.txt文件,然后进行合并。
13)将修改完的文件提交并合并
注:以上已经解决了分支冲突问题,并且完成了合并。
六、标签管理
标签就是版本库的一个快照,在发布新版本的时候,一般都会给老的版本打个标签,方便后续直接使用指定的版本
1、创建标签并查询标签 git tag
2、创建带有描述的标签
git tag -a 标签名称 -m 描述信息
//给未打标签的文件设置标签 git tag 标签名称 commitID
1)查看当前分支所有已提交文件id git log --pretty=oneline
2)给指定commit id创建标签 git tag 666_3 84f0
3、查询标签说明 git show 标签名称
4、删除本地标签 git tag -d 标签名称
5、提交标签到远程仓库(指定的版本号)
git push 远程仓库名 标签名称
//提交本地仓库所有标签 git push https://github.com/W-F-Y/test.git --tags
6、删除远程仓库的标签
//先删除本地标签 git tag -d 666
//再删除远程标签 git push https://github.com/W-F-Y/test.git :refs/tags/666
参考网址: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
标签:Git,文件,git,nihao,Centos7,暂存区,版本,txt 来源: https://www.cnblogs.com/lee88888/p/15305400.html