Git实战
1、Git特点
1.1、Git两大特点
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
- 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。
2、Git安装与配置
2.1、安装命令
sudo apt-get install git
2.2、安装成功后,查看版本信息
git
3、创建版本库
3.1、新建一个目录git_test,在git_test目录下创建一个版本库
git init
4、版本创建与回退
4.1、使用
4.1.1、在git_test目录下创建一个文件code.txt,编辑内容如下:
4.1.2、使用如下两个命令创建一个版本
git add code.txt
git commit -m '版本一'
4.1.3、使用如下命令可以查看版本记录
git log
4.1.4 、继续编辑code.txt,在里面增加一行
4.1.5、使用如下命令再创建一个版本并查看版本记录
4.1.6、现在若想回到某一个版本,可以使用如下命令
git reset --hard HEAD^
4.1.7、假如我们现在又想回到版本2,这个时候怎么办?可以使用如下命令
git reset --hard 版本号
4.1.8、在终端执行如下命令
4.1.9、假如说上面的终端已经关了改怎么回退版本。我们在执行如下命令将版本回退到版本1
git reflog
4.2、工作区和暂存区
4.2.1、工作区(Working Directory)
4.2.2、版本库(Repository)
4.2.3、下面在git_test目录下再创建一个文件code2.txt,然后编辑内容如下
4.2.4、然后再次编辑code.txt内容,在其中加入一行,编辑后内容如下
4.2.5、使用如下命令查看当前工作树的状态
git status
4.2.6、我们使用如下命令把code.txt和code2.txt加入到暂存区,然后再执行git status命令,结果如下
4.2.7、 然后,执行git commit就可以一次性把暂存区的所有修改提交到分支创建一个版本
4.2.8、一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。执行如下命令可以发现
4.3、管理修改
4.3.1、编辑code.txt,并使用git add 命令将其添加到暂存区中
4.3.2、继续编辑code.txt,并在其中添加一行
4.3.3、git commit创建一个版本,并使用git status查看,发现第二次修改code.txt内容之后,并没有将其添加的暂存区,所以创建版本的时候并没有被提交
4.4、撤销修改
4.4.1、继续上面的操作,提示我们可以使用 git checkout -- <文件> 来丢弃工作区的改动。执行如下命令,发现工作区干净了,第二次的改动内容也没了
4.4.2、我们继续编辑code.txt,并在其中添加如下内容,并将其添加的暂存区
4.4.3、git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉,重新放回工作区
4.4.4、现在若想丢弃code.txt的修改,执行如下命令即可
4.5、对比文件的不同
4.5.1、继续编辑文件code.txt,在其中添加一行内容
4.5.2、现在要对比工作区中code.txt和HEAD版本中code.txt的不同。使用如下命令
4.5.3、使用如下命令丢弃工作区的改动
4.5.4、现在要对比HEAD和HEAD^版本中code.txt的不同,使用如下命令
4.6、删除文件
4.6.1、我们把目录中的code2.txt删除
4.6.2、现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
5、分支管理
5.1、概念
5.2、创建与合并分支
5.2.1、原理理解
5.2.2、案例:
5.2.2.1、执行如下命令可以查看当前有几个分支并且看到在哪个分支下工作
5.2.2.2、下面创建一个分支dev并切换到其上进行工作
5.2.2.3、下面我们修改code.txt内容,在里面添加一行,并进行提交
5.2.2.4、dev分支的工作完成,我们就可以切换回master分支
5.2.2.5、现在,我们把dev分支的工作成果合并到master分支上
5.2.2.6、合并完成后,就可以放心地删除dev分支了,删除后,查看branch,就只剩下master分支了
5.3、解决冲突
5.3.1、再创建一个新分支dev
5.3.2、修改code.txt内容,并进行提交
5.3.3、切换回master分支
5.3.4、在master的code.txt添加一行内容并进行提交
5.3.5、执行如下命令尝试将dev分支合并到master分支上来
5.3.6、git status也可以告诉我们冲突的文件
5.3.7、查看code.txt的内容
5.3.8、git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存
5.3.9、再提交
5.3.10、现在,master分支和dev分支变成了下图所示
5.3.11、用带参数的git log也可以看到分支的合并情况
5.3.12、最后工作完成,可以删除dev分支
5.4、分支管理策略
5.4.1、创建切换到dev分支下
5.4.2、新建一个文件code3.txt编辑内容如下,并提交一个commit
5.4.3、切换回master分支,编辑code.txt并进行一个提交
5.4.4、合并dev分支的内容到master分支
5.4.5、出现如下提时,这是因为这次不能进行快速合并,所以git提示输入合并说明信息,输入之后合并内容之后git会自动创建一次新的提交
5.4.6、使用分支命令查看分支信息
5.4.7、删除dev分支
5.4.8、创建并切换到dev分支
5.4.9、修改code.txt内容,并提交一个commit
5.4.10、切换回master分支
5.4.11、准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
5.4.12、合并后,我们用git log看看分支历史:
5.5、Bug分支
5.5.1、当你接到一个修复一个代号001的bug的任务时,很自然地,你想创建一个分支bug-001来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
5.5.2、git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
5.5.3、首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
5.5.4、现在修复bug,把 the new line删掉,然后提交
5.5.5、修复完成后,切换到master分支,并完成合并,最后删除bug-001分支
5.5.6、现在bug-001修复完成,是时候接着回到dev分支干活了!
5.5.7、工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:
6、使用github
6.1、创建仓库
6.1.1、注册github账户,登录后,点击"New respository‘’
6.1.2、在新页面中,输入项目的名称,勾选'readme.md',点击'create repository'
6.1.3、添加成功后,转到文件列表页面
6.2、添加ssh账户
6.2.1、点击账户头像后的下拉三角,选择'settings'
6.2.2、在ubuntu的命令行中,回到用户的主目录下,编辑文件.gitconfig,修改某台机器的git配置
6.2.3、修改为注册github时的邮箱,填写用户名
6.2.4、使用如下命令生成ssh密钥
ssh-keygen -t rsa -C "邮箱地址"
6.2.5、进入主目录下的.ssh文件,下面有两个文件
6.2.6、回到浏览器中,填写标题,粘贴公钥
6.3、克隆项目
6.3.1、在浏览器中点击进入github首页,再进入项目仓库的页面
6.3.2、复制git地址
6.3.3、克隆出错
6.3.4、在命令行中复制仓库中的内容
6.4、上传分支
6.4.1、项目克隆到本地之后,执行如下命令创建分支smart
6.4.2、创建一个code.txt并提交一个版本
6.4.3、推送前github上文件列表如下图
6.4.4、推送前github上分支列表如下图
6.4.5/推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,git就会把该分支推送到远程库对应的远程分支上
git push origin 分支名称
例:
git push origin smart
6.4.6、再去github网站上去看分支页面,内容如下
6.5、将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/远程分支名称 本地分支名称
例:
git branch --set-upstream-to=origin/smart smart
6.6、从远程分支上拉取代码
git pull orgin 分支名称
例:
git pull orgin smart
7、 工作使用git