Git-基本知识点(常用)
一、Git-小百科
基本介绍
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
功能特性
从一般开发者的角度看git有以下功能:
1、从服务器上克隆数据库
2、在自己的机器中创建分支,修改代码
3、在单机上自己创建的分支上提交代码
4、在单机上合并分支
5、新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
二、git的操作方法
1、配置当前用户信息
1、首先查看配置列表,判断之前是否绑定过github以及绑定的是什么用户:
git config --list //查看配置列表复制代码
2、如果没有配置,就配置一下,再次查看配置列表:
git config --global user.name "wwml725"git config --global user.email "wwml725@163.com"git config --list复制代码
注意:
1、git是分布式管理系统,所以每一个机器都必须填写自己的名字和email地址。
2、git config命令的--golbal参数,代表这台机器上所有的git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。(怎么指定?后续会介绍)
2、git常用的操作命令
1、创建目录,进入目录
mkdir fitst //创建目录cd first 进入目录mkdir test && cd test复制代码
2、显示当前环境的位置
pwd 显示当前环境的位置复制代码
3、初始化
git init //初始化仓库 自动创建一个master分之ls -al 查看这个文件夹中所有文件(包括隐藏的,注意不是查看分支上的内容)rm -rf .git 如果初始化错误,删除.git文件夹复制代码
4、创建文件、 查看文件内容
touch index.txt //创建index.txt文件cat index.txt //查看文件内容复制代码
5、vi命令在文件中插入内容
vi index.txti (输入内容)esc + :+ w+ q //保存并且推出q! //强制退出复制代码
6、在文件中写入内容
echo 1 > index.txt //在文件中写入内容 覆盖里面的所有内容echo 2 >> index.txt //在原来的文件末尾添加内容 复制代码
7、删除文件
rm index.txt //删除文件rm -rf text //删除文件夹复制代码
3、工作区-暂存区-历史区
这都是基于一个分支master上或者其他子分支dev1
1、查看git状态
git status复制代码
- 红色:工作区。
- 绿色:暂存区。
2、推送到暂存区
git add index.txt //只推送这个文件 git add . //推送工作区所有文件复制代码
3、推送至历史区
git commit -m"注释""复制代码
4、联合提交
复制代码
注意
:
1、git add .
将文件从工作区推送到暂存区。
2、git commit -m“注释"
将文件从暂存区推送至历史区(也就是推送到了这个分支上)
3、我们可以多次add不同的文件或者一次性add所有文件,commit可以一次性提交多个add后的文件。
4、git commit
如果没有添加-m
,就会弹出一个编辑页面,可以输入你的注释,然后按ESc退出编辑模式,在输入:wq!退出页面。
4、代码对比和回滚
实际上就是查看工作区、暂存区、历史区文件的区别。
git int touch 1.txttouch 2.txtgit add 1.txt 2.txtgit status git rm --cached 1.txt //删除暂存区的1.txtgit reset 1.txt //将文件从暂存区回退到工作区 作用同上git status 复制代码
git diff //比较工作区和暂存区 某些文件的区别git diff --cached //暂存区和历史区最新版本的区别git diff master //工作区和历史区最新版本的区别复制代码
删除文件
git rm 1.txt //删除分支上历史区的文件git rm --cached 1.txt //删除暂存区的这个文件rm 1.txt //删除工作区文件但是不会删除暂存区文件复制代码
git log //查看分支的版本git reflog //查看版本复制代码
git log
和git reflog
都是查看分支的版本,后者能查看删除的版本。
5、分支管理
git默认主分支是:master
1、查看当前项目的分支
git branchgit branch dev 创建子分支dev复制代码
注意
: 1、可以创建多个子分支,都是从主分支master复制过来的,在master分支的基础上修改。 2、在dev上创建的分支dev1,和dev内容一致。 3、将文件提交到某个分支上,这个文件就属于哪个分支。 4、一般情况下,开发项目,都会有一个主分支,在这个主分支上建立一个小分支进行开发,如果发生错误不会影响主分支。 5、文件经过git add commit 之后才算是提交至分支。
#####2、切换分支
git checkout dev //切换至dev分支git checkout -b dev //切换并创建分支复制代码
3、合并分支
git merge 分支名称复制代码
- 1、默认master是主干,合并分支要在主干
git merge 分支名
。 - 2、合并分之后,被合并的分支需要被删除。
- 3、合并完成后,将合并的文件再次上传至
github
。
4、处理冲突
情况1:fast-forward
- 主干没有任何更新
- 分支提交新的代码
- 合并之后删除分支
情况2:合并多个分支时,合并的内容可能会产生冲突
- 手动解决冲突,提交最新结果 1、去掉 >>>>> == <<<<<保留最终的结果即可 2、再次提交
思考:合并分支分支冲突发生的原因和解决方法??
1、首先主分支是==master==
2、通过==git checkout dev1==创建一个子分支,在子分支上修改或者添加代码,并且提交至子分支==dev1==上。
3、主分支==master==被人修改了,在主分支==master==上通过==git merge dev1==将子分支合并在主分支上
4、这时候冲突已经产生我们要手动解决冲突
5、解决完之后,再次提交主分支上所有的代码。
5、删除分支
- 代码合并之后要删除子分支
git branch -D dev复制代码
6、提交主干分支
默认我们的代码是放在工作区中,不属于任何分支,只有提交到某个分支上,此文件才属于特定的分支。
三、git-remote
1、绑定密匙
首先注册Github账号。由于你的本地git仓库和github仓库之间的传输是通过SSH加密的,所以需要设置一下:
第一步: 创建SSH Key。
在用户主目录下看看有没有.ssh目录:
如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可以直接跳到下一步。
如果没有,请打开Shell(window下打开git bash),创建SSH Key:
ssh-keygen -t rsa -C "wwml725@163.com"复制代码
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key
的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
- 查看密匙的快捷方式,在命令行输入
cat ~/.ssh/id_rsa.pub 复制代码
2、提交到远程仓库
1、创建文件夹
README.md
:这是自述文件,介绍代码的功能和使用方法
.gitignore
:将需要忽略的文件名 写在这个文件中,就不会别提交至github中
git
不能提交空文件夹
2、提交到分支的历史区
git add .git commit -m"注释""复制代码
3、查看远程仓库
git remote -v复制代码
4、关联远程仓库
先add commit 推送至分支上,在推送到github上
git initgit commit -m "first commit"git remote add origin github地址 (例如:https://github.com/wwml725/first.gitgit push -u origin master)复制代码
从命令行推送分支上现有的存储库:
git remote add origin https://github.com/wwml725/first.gitgit push -u origin master复制代码
仓库关联之后,再次推送
git push origin master -u 复制代码
这样推送过==u==,下次就能通过==git push==推送了
5、把某个分支上的内容都拉取到本地
git pull origin master(远程分支名称)复制代码
3、在github上发布静态网站
- 1、在当前项目下建立一个gh-pages的分支
- 2、将需要发布的内容推送到这个gh-pages分支上
- 3、在github网站上创建一个仓库
- 4、将分支上的内容推送至github仓库
- 5、github会给我们一个在线地址
git checkout -b gh-pagesgit add .git commit -m '添加静态页面地址'git push origin gh-pages复制代码
- 在settings中可查找到网址+ 文件名即可 (默认会展示文件)
4、更换github地址
注意
:地址更新后,从新配置本地仓库,但是总是出问题:经常出现以下错误:
remote: Permission to wwml725/first.git denied to wangwenghui. fatal: unable to access 'https://github.com/wwml725/first复制代码
解决方案: 到控制面板 ----账户安全 ---凭据管理器 ----图片最下面的从保管库中删除----再重新重做一遍修改,添加,提交 ,这是就会再需要登陆git
四、后期补充
- 分支之间不存在父子关系
一个项目有一个共用分支develop
- 这个分支上的数据任何人都不能进行修改,要基于这个分支创建一个新的分支,在这个分支上进行开发,编码完成之后确定数据没有问题,再将这个分支与共用分支合并
新建文件夹1.git clone (https://github.com/limin0428/earlyjoy):写自己组长地址2. cd earlyjoy 进入到文件3.git checkout scaffold //切换到scaffold分支 4.git checkout -b 自己名字 //创建并切换到自己的分支上(此时已经在自己分支上)5.修改文件后或者用1.txt测试(注意要一直在自己的分支上作业,并且推送,不要往master推送,推送时候可以看后缀是否是自己分支名)6.git add .7.git commit -m "注释"8.git push origin 自己分支名字以后只需要重复6 , 7 ,8步复制代码