文章目录
Git是分布式版本控制系统,GitHub网站为开源项目免费提供Git存储
·
Git两大特点:
● 版木控制:可以解决多人同时开发的代码问题,也可以解决我回历史代码的问题。
● 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器"仓库克隆一份到自己的电脑上,并且各自把各白的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub.网站。
·
Git配置
在安装好Git后, 还需要进行一步配置:
$ git config --global user.name “Your Nmae”
$ git config --global user.email “email@example.com”
注:git config
命令的 --global
参数,用了这个参数表示这台机器山所有的Git仓库都会使用这个配置,也可以对某个仓库指定不同的用户名和Email地址。
GIt是分布式版本控制系统,所以每台机器都必须向Git指明自己的信息
Git基本操作
● 创建一个版本库(初始化仓库)
$ git init
● 创建一个版本
$ git add 文件
$ git commit -m ‘说明’
● 查看版本记录
$ git log
$ git log --pretty=oneline (简化显示)
● 查看仓库当前状态
$ git status
·
● 增加记录修改版本后
·
● 版本回退
Git中有一个指针HEAD
指着最新的版本内容
那么当前版本可以用HEAD
来表示,上一个版本用HEAD^
表示,前两个版本就可以用HEAD^^
表示
当版本比较多的时候可以用 HEAD~数字
,表示前多少个版本(HEAD~1前一个版本)
或者使用
$ git reset --hard HEAD^ -------回到前一个版本
·
当回到版本1时,并不代表版本2被删除了,版本2依然在仓库中可以回到版本2,通过命令:
$ git reset --hard 版本编号(可只取前几位)
·
当git log中没有版本2的版本编号时,想回到版本2可以用git reflog
来查看历史log记录
$ git reflog
·
● Git的工作区和版本库
在当前目录中是属于工作区,而当前目录下的.git
文件中属于版本库,版本库里存在一个暂存区,当在工作区对文件做好修改后输入git add 文件1,文件2
命令则会把工作区的文件1,文件2添加到暂存区,在工作区输入git commt
命令后会把暂存区的所有待提交文件提交到当前分支也就是 创建版本记录
·
● 撤销修改
$ git checkout – 文件名
1)当多次修改但都并未添加到暂存区时,输入git checkout -- 文件
会将该文件返回到初始时候的状态(即在上次提交到版本库后的样子或上次添加到暂存区后的样子),并不会只撤销一次修改会撤销到该文件上次提交到版本库后(或上次添加到暂存区后)所有在工作区的修改
2)当多次修改后添加到暂存区了,可以使用命令git reset HEAD 文件
把暂存区的该文件删除,重新放回工作区再进行撤销修改,回到上次提交到版本库后的状态
例1:
·
例2:
·
● 对比文件不同
$ git diff HEAD HEAD^ 文件
例:
例:
·
● 删除文件
删除文件也是属于在工作区的修改,可以通过撤销修改恢复文件
通过命令git rm 文件名
将删除此文件的命令添加到暂存区
$ git rm 文件名
·
·
·
Git分支管理
master指向主线,HEAD指向master,每次提交后主线会越来越长,master自动指向主线最后一次提交
Git创建分支非常快速,当创建分支dev后,dev自动指向主线最后一次提交,HEAD则指向dev
此后再进行提交,master不动,dev会随着主线的变长跟随指向最后一次提交,
当在dev分支上的任务完成后,可以让dev合并到master上,即直接让master指向dev所指向的地方,HEAD执指向master则完成了合并。
创建并切换到一个分支
$ git checkout -b 分支名
·
● 查看当前分支的数量
$ git branch
● 切换分支
$ git checkout 要切换的分支名
● 合并分支
$ git merge 分支名
默认合并是快速合并 Fast-forward
● 删除分支
$ git branch -d 分支名
● 解决合并分支的冲突
当切换分支,在分支和master中对同一文件都进行处理了并进行提交后,在合并时会出现合并冲突
此时打开双方都修改的文件可以看到,在分支dev中对该文件添加了” bye “, 在当前HEAD指向的master中对该文件添加了” nihao “
将文件中多余的标示符号去掉保存后,在主线中进行一次提交即可解决冲突,此时可以直接删除分支dev
·
查看分支的图
$ git log --graph --pretty=oneline
·
分支管理策咯(手动非快速合并)
分支合并三种情况:
1)分支上做了改动,master上未做改动,通过git merge 分支名
可以进行快速合并
2)分支上和master对同一文件都做了改动并且提交后进行合并,合并冲突,需解决冲突后,才能删除分支
3)分支上做了改动,master也做了改动但并未对同一文件进行改动,通过命令git merge --no-ff -m '说明' 分支名
进行非快速合并
·
● 2)解决合并分支的冲突
当切换分支,在分支和master中对同一文件都进行处理了并进行提交后,在合并时会出现合并冲突
此时打开双方都修改的文件可以看到,在分支dev中对该文件添加了” bye “, 在当前HEAD指向的master中对该文件添加了” nihao “,git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
将文件中多余的标示符号去掉保存后,在主线中进行一次提交即可解决冲突,此时可以直接删除分支dev
·
查看分支的图
$ git log --graph --pretty=oneline
·
● 3)非快速合并分支
当分支上做了改动,master也做了改动并未对同一文件进行改动时,进行快速合并,会出现下面界面:
·
在这种情况中应该使用非快速合并
$ git merge --no-ff -m ‘说明’ 分支名
·
·
保存与恢复现场
当事情处理到一半突然有其他紧急的任务需要切换分支时,可以保存现场,等处理完其他紧急任务回来后再恢复现场。
$ git stash
·
$ git stash list
·
$ git stash pop
与Github的交互
● 添加ssh账户
(1)点击账户头像后的下拉三角,选择’settings’
如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上
点击’SSH and GPG keys’,添加ssh公钥。
·
(2)在ubuntu的命令行中,回到用户的主目录下,编辑文件.gitconfig
,修改某台机器的git配置。
(3)使用如下命令生成ssh密钥。
$ ssh-keygen -t rsa -C “邮箱地址”
·
(4)进入主目录下的.ssh文件,下面有两个文件。
公钥为 id_rsa.pub
私钥为 id_rsa
查看公钥内容,复制此内容
·
(5)回到浏览器中,填写标题,粘贴公钥
·
·
● 克隆项目
(1) 复制git地址
(2) 在主机上使用命令
$ git clone 复制的git地址
(3) 克隆出错时使用以下红框内的命令
·
·
● 上传分支
$ git push origin 分支名称
将该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,git就会把该分支推送到远程库对应的远程分支上
·
● 将本地分支跟踪服务器分支
$ git branch --set-upstream-to=origin/远程分支名称 本地分支名称
本地分支跟踪远程分支,在提交了数据后,上传分支只需在终端输入git push
即可自动上传
·
● 从远程分支上拉取代码
$ git pull origin 分支名称
将远程分支上的代码下载并合并到本地所在分支