简介
git定义:Git是目前世界上最先进的分布式版本控制系统(没有之一)。
特点:高端大气上档次
版本控制系统:不但能自动记录每次文件的改动,还可以让同事协作编辑
安装git
2.备注:在安装的过程中,所有选项使用默认值即可。
3.成功标志:右键出现Git标志
创建SSH Key
1.命令创建ssh
命令:ssh-keygen -t rsa -C "youremail@example.com"
注:输入命令后一路回车,使用默认值即可

2.找到秘钥对
在c盘中的用户目录下admin目录下找到.ssh目录,其中里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
3.github添加key
操作路径:右上角头像---settings---SSH and GPG keys---New SSH key
Title可以填任意名字
key文本中粘贴id_rsa.pub
文件的内容
点击”Add SSH key“
注:GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送
配置信息
即:在本地第一次用git时需要配置信息
工作目录:被Git管理的项目目录
使用前配置信息:
\1. 配置提交人姓名: git config --global user.name 张三(提交人名字)
\2. 配置提交人姓名: git config --global user.email 111111111@qq.com(提交人邮箱)
\3. 查看git配置信息: git config --list
注意:修改配置信息,只需重复命令
上传项目
注:即本地没有仓库,想要把本地项目上传到github
1.在github上新建一个仓库用于存储本地的项目
2.在本地建立git仓库
命令:git init
显示仓库:左上角【组织】-【文件夹和搜索选项】-【查看】-显示隐藏的文件、文件夹或驱动器
2.查看文件状态--(在工作目录(红色)还是暂存区(绿色))
命令:git status
3.把文件放置到暂存区
命令:git add 文件名 //(git add .// 表示放置文件夹的全部内容)
4.把文件放置到本地仓库
命令:git commit -m 第一次提交(提交信息)
5.把文件放置到线上仓库
命令:git push -u github.com/用户名/仓库名字.gi… master(分支名称)
注意:
-
第一次提交需要输入账号和密码
-
-u 记住推送地址及分支
-
-f 表示强制推送,当推送期间报错时,可以使用强制推送,但是会有严重后果
-
修改后更新文件,只需重复上述代码,同一仓库下次推送只需要输入git push即可
6.查看提交记录
命令:git log
克隆项目
注:即在本地没有项目,想要克隆github仓库中的项目到本地进行开发
1.第一次克隆线上仓库
命令:git clone github.com/用户名/仓库名字.gi…(仓库地址)
2.第二次后只拉取更新后的文件
命令:git pull 远程仓库地址 分支名称 (可以简化为git pull)
分支管理
分支概念
分支概念:git中的分支非常的轻量,可以把分支当成一个文件,文件里面记录了分支所指向的commit id
master概念:项目每次提交,git会把它们串成一条时间线,叫主分支,即master,其中HEAD指向master,master指向最新提交

新建分支
新建分支:当在项目里新建一个test分支时,master和test都会指向同一个提交,而HEAD是一个特殊的指针,他永远指向你当前所在的位置,用于表示当前分支在test上
命令:git branch dev

分支操作
分支操作:当当前分支在dev上时,工作区的修改和提交时针对于dev分支,操作一次,dev指针向前移动一步,而master指针不动(test分支一样),分支操作需要提交后才能保存到仓库,才能进行切换分支操作

1.切换分支
命令:git checkout master或git switch master
注:当在dev分支上修改了原文件,但是没有提交到仓库的前提下,把分支切换熬master分支上时,master分支可以看到dev分支修改的内容。原因:对于分支来说,工作区和暂存区是公共,未进行提交时,相当于在本地修改了文件,仓库并不能保存所做的修改
2.创建并切换到dev分支
命令:git checkout -b dev或git switch -c dev(相当于两条命令)
3.查看当前分支
命令:git branch (后面加-v参数表示详细信息)
分支合并
概念:当在dev分支上的工作完成后,可以把dev合并到master上,合并分支有三种方法,分别是merge、rebase、cheer-pick
merge
merge方法:merge合并分支有三种区别,分别是fast-forward、no-ff、squash
fast-forward
概念:即快速合并。当待合并的分支在当前分支的下游,也就是没有分叉时,会产生快速合并。该模式下,删除分支后,会丢掉分支信息。
思路:从test分支切换到master分支,然后直接把master指向dev的当前提交,完成合并。
命令:
git checkout master
git merge test
操作演示:

no-ff
概念:即非快速合并,只需加上--no-ff参数。当不想快速合并时,可以强制指定为非快速合并
思路:从test分支切换到master分支,在master分支上新建一个提交节点,然后把master指向该节点,完成合并。
命令:
git checkout master
git merge –no-ff test
演示

squash
概念:svn的合并分支时采用的就是这种方式
思路:squash会在当前分支新建一个提交节点,squash和no-ff非常类似,区别只有一点不会保留对合入分支的引用
命令:
git checkout master
git merge –squash test
演示:

分支删除
注:开发时不需要删除分支,开发完成后可删除分支
删除dev分支:当dev和master合并完后,可以删除dev分支,则剩下一条master分支
命令:git branch -d dev

分支总结
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支冲突
冲突描述
描述:在dev分支上进行开发,开发完在分支上进行提交,然后切换到master分支,并在master分支上进行修改,修改后在master分支进行提交,演示如下

当分支冲突并进行了合并操作时,Git用以下方法标记出不同分支的内容
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
解决冲突
思路:把Git合并失败的文件手动编辑为我们希望饿内容,在提交,图解如下

拓展:
查看分支合并图
命令: git log --graph --pretty=oneline --abbrev-commit
分支分类
bug分支
应用场景:需要修复bug时创建该分支
1.修复bug时,需要通过创建新的bug分支进行修复,然后合并分支,最后删除bug分支
2.当有工作未完成时,要把工作现场git stash一下,然后进行第一点操作,修复bug,再git stash pop回到工作现场
3.在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
feature分支
应用场景:当有新功能添加时创建该分支
1.需要新增功能时,需要通过创建新的feature分支进行可开发,然后合并dev分支,最后删除feature分支
2.当要丢弃一个没有被合并过的分支,需要通过git branch -D feature强行删除
团队开发流程
fork团队项目
描述:将公司项目fork 到自己的github
操作路径:打开负责人给的项目链接---点击项目中右边的fork按钮
注:fork 即创建源项目代码库的分支,并拷贝到自己的账号中。
查看自己的仓库
描述:切换到自己的github中,查看是否存在已fork的项目
克隆项目到本地
描述:在本地工作目录区克隆自己github中的项目
实现步骤:
1.在本地新建一个空文件夹,命名和项目名一致
2.克隆项目:git clone github.com/H3-eng/test…
注:git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快(创建ssh参考上面操作)
3.可选操作
- 查看远程分支:git branch(此时显示只有master分支)
管理远程主机
- 列出所有远程主机(名字): git remote
- 显示更详细的信息(名字+网址):git remote -v
- 添加远程主机:git remote add main git@github.com:michaelliao/learngit.git
- 删除远程主机:git remote rm main(主机名)
- 远程主机重命名:git remote rename main(原主机名) mainner(新主机名)
- 注意:克隆仓库时,所使用的远程主机自动被命名为origin
dev分支进行开发
1.创建并切换dev分支:git checkout -b dev或git switch -c dev
2.查看当前分支:git branch (*表示当前分支)
3.查看分支追踪仓库:git branch -vv
4.设置分支跟踪远程分支:git branch --set-upstream-to=main/master dev
5.拉去跟踪分支的代码:git pull
项目合并
1.开发完成后正常进行提交操作(add、commit)
2.切换到主分支(master):git checkout master或git switch master
3.master合并dev分支:git merge dev
4.删除分支:git branch -d dev(可选操作)
5.上传代码到自己github:git push
6.在自己的github提交请求合并代码
版本回退
1.查看文件提交的历史记录
命令:git log
注:git log命令显示从最近到最远的提交日志,添加--pretty=oneline参数可以省略部分的显示信息
命令:git log --pretty=oneline
2.回退到上一个版本
注:在git中用HEAD表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
命令:git reset --hard HEAD^
3.重新恢复被去除的版本
命令:git reset --hard 64ec117
注:64ec117表示版本号,版本号只需前几位即可,git会自动去找
方法一:命令行窗口没有被关掉,可以找到被去除的版本ID
方法二:命令行窗口关闭
命令:git reflog
注:该命令用来记录每次的提交信息
撤销操作
1.checkout撤销操作
命令: git checkout -- new.txt
注:
场景一:一种是new.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
场景二:一种是new.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2.reset撤销操作
注:可以把暂存区的修改撤销掉,重新放回工作区
命令:git reset HEAD new.txt
命令:git checkout -- new.txt (撤销工作区的修改)
3.文件提交到本地仓库后撤销操作
注:即版本回退
总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
1.删除步骤
(1)手动删除文件
(2)使用命令删除仓库的文件
命令:git rm new.txt
参考来源:
廖雪峰老师的git教程: <www.liaoxuefeng.com/wiki/896043…