Git官网:https://git-scm.com/

一、Git下载

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

官网首页下载,当前最新版本:2.24.1

Windows下Git的使用 随笔 第1张

 本人下载的是Git for Windows版本:Git-2.24.1.2-64-bit.exe

二、安装

基本上按照默认选项安装即可。

Windows下Git的使用 随笔 第2张

 安装成功后在开始菜单生成Git目录和3个子菜单。

Windows下Git的使用 随笔 第3张 

Git Bash:一个封装过的cmd命令行,并在其中加入了一些新的命令与功能。(linux风格)
Git CMD(Deprecated):cmd命令行界面,提示已弃用。(windows风格)
Git GUI:可视化图形界面。

三、Git工作流程

1、工作流程图

 Windows下Git的使用 随笔 第4张

Workspace:工作区,电脑里能看到的目录
Index/Stage:暂存区,存放在.git/index中,所以暂存区有时也叫作索引(index)。
Repository:版本库(本地仓库),工作区的隐藏目录.git
Remote:远程仓库,托管代码的服务器

2、工作区之间关系和命令

Windows下Git的使用 随笔 第5张

3、Git常用命令速查表

Windows下Git的使用 随笔 第6张

四、设置自己的用户名和邮箱

打开Git Bash,界面如下:

Windows下Git的使用 随笔 第7张 

先后输入下面2条命令并回车:

git config --global user.name "用户名"
git config --global user.email "邮箱"

Windows下Git的使用 随笔 第8张

五、创建版本库(repository)

1、执行cd d:命令进入d盘

2、执行mkdir gitRepo命令在d盘创建目录gitRepo

3、执行pwd命令可以查看当前目录

4、执行git init命令把gitRepo目录变成Git管理的版本库

 Windows下Git的使用 随笔 第9张

六、Git的基本操作

1、提交版本库、查看状态等

(1)在d:/gitRepo手动建立文件test.txt,内容为“第1行”;
(2)打开Git Bash执行cd d:/gitRepo进入此目录;
(3)先后执行git addgit commit命令,把文件提交到暂存区,再把暂存区提交到版本库;
(4)执行git status查看状态,git提示工作区是干净的,没有什么需要提交;
(5)编辑文件test.txt,加入一行内容“第2行”;
(6)执行git status查看状态,git提示文件被修改过了,但还没提交。使用git add <file>...提交,使用git restore <file>...取消修改;
(7)执行git diff test.txt,比较工作区和暂存区;(如果使用git diff HEAD test.txt则是比较工作区和版本库)

Windows下Git的使用 随笔 第10张 

2、版本回退(接上面例子)

(1)先后执行git add和git commit命令
(2)使用git log查看提交历史,也可使用git log --pretty=oneline简化输出
18b6a...和a8a4d...是版本号,Git用HEAD表示当前版本,即18b6a...,上一次版本是HEAD^,上上一个版本就是HEAD^^,也可以用数字表示,如HEAD~2
(3)使用git reset --hard HEAD^还原到上一个版本,执行行命令后打开test.txt可看到内容被还原了
(4)假设第(3)是误操作,想回到它之前的历史,则可使用git reset --hard 18b6a(版本号不需写全)
(5)版本号也可使用命令git reflog查询

Windows下Git的使用 随笔 第11张 

3、撤销修改(接上面例子)

(1)编辑文件test.txt,加入一行内容“第3行”;
(2)此时还没添加到暂存区,可使用git checkout -- test.txt撤回工作区的修改
(3)编辑文件test.txt,加入一行内容“第3行”,并使用git add添加到暂存区;
(4)此时文件已添加到暂存区,可使用git reset HEAD test.txt撤销暂存区的修改,然后再使用git checkout -- test.txt撤回工作区的修改;

Windows下Git的使用 随笔 第12张 

4、删除文件的还复(接上面例子)

删除也是一种修改,删除的方式有2种:
如果使用rm相当于在资源管理器里面直接删除,只删除工作区的文件,可以直接使用checkout还原;
如果使用git rm则是删除工作区和暂存区的文件,需要先使用reset,再使用checkout还原(只用这个会报错);

备注:如果想彻底删除文件,则git rm后需要git commit。

Windows下Git的使用 随笔 第13张

 七、GitHub配置SSH Key

在用github管理项目的时候,可使用https url和SSH url两种方式克隆到本地。

https url和SSH url区别:
(1)使用https url克隆,只需要复制https url,然后到git Bash里面直接用clone命令克隆到本地就好了;可以随意克隆github上的项目;在push时需要验证用户名和密码。
(2)使用SSH url克隆需要是要克隆的项目的拥有者或管理员,且需要先添加 SSH key 。SSH 在push的时候,不需要输入用户名,如果配置SSH key的时候设置了密码,则需要输入密码,否则直接是不需要输入密码的。

GitHub配置SSH Key的流程:
1、设置自己的用户名和邮箱(见上面)
2、创建一个 SSH key
打开Git Bash,执行命令:ssh-keygen -t rsa -C "自己的邮箱地址",
过程中会提示输入文件名,直接按回车用默认文件名,之后提示输入密码,按回车表示不需要输入密码。
Windows下Git的使用 随笔 第14张

在用户主目录下会生成id_rsa和id_rsa.pub两个文件,id_rsa是私钥(不能泄露),id_rsa.pub是公钥。

Windows下Git的使用 随笔 第15张 

3、登陆GitHub ->右上角头像处选择“Settings”-> SSH and GPG keys -> New SSH key ->
Title随便写,在Key文本框里粘贴id_rsa.pub文件的内容 -> 点击“Add SSH key”保存。

 Windows下Git的使用 随笔 第16张

保存后如下:

Windows下Git的使用 随笔 第17张 

 4、测试SSH key

输入ssh -T git@github.com,返回一段警告信息,输入yes即可。

Windows下Git的使用 随笔 第18张 

 因为创建SSH key是没有设置密码,所以这里不用输入密码。

 八、GitHub仓库的操作

1、GitHub创建Git仓库

在本地创建了一个Git仓库,同步到GitHub仓库上,这样别人可以通过GitHub仓库来协作。
(1)登陆GitHub创建仓库

登陆GitHub ->右上角头像处选择“Your repositories”-> New -> 在“Repository name”下面输入名称,如gitRepo -> 点击“Create repository”提交。

Windows下Git的使用 随笔 第19张

(2)把本地仓库关联到GitHub仓库

git remote add origin git@github.com:jlccn/gitRepo.git

Windows下Git的使用 随笔 第20张 

备注:jlccn是本人的GitHub账户名;gitRepo是上面第(1)建立的Repository name;origin是远程库名字,这是Git默认的叫法。

(3)把本地仓库的内容推送到GitHub仓库

执行命令:git push -u origin master
备注:第一次推送master分支时,由于远程库是空的,所以加上-u参数,表示把本地master分支内容推送到远程master分支,还会把本地的master分支和远程的master分支关联起来,以后的推送或者拉取时就可以省略-u参数。

Windows下Git的使用 随笔 第21张 

本人是win7系统,推送时报错ssh:connet to host github.com port 22:Connection timed out
应该是22端口被防火墙禁用了,启用方法如下:
控制面板(右上角选择查看方式为大图标)—>防火墙—>高级设置—>高级设置—>出站规则—>最右边 新建规则“新建出站规则向导”—>选择第二个“端口”—>下一步,默认TCP,默认特定远程端口,后面输入22 —>下一步,允许连接—> 下一步—>下一步,名称随便输入如“22端口”—>完成。
重新执行git push命令,成功了。

Windows下Git的使用 随笔 第22张 

 (4)查看GitHub页面,可看到文件test.txt已经同步上去。

Windows下Git的使用 随笔 第23张

2、从远程库克隆到本地

从头开始,在GitHub创建远程库,再克隆到本地。

(1)登陆GitHub创建仓库
登陆GitHub ->右上角头像处选择“Your repositories”-> New -> 在“Repository name”下面输入名称,如gitRepo2,勾选Initialize this repository with a README -> 点击“Create repository”提交。
(2)执行cd d:切换到d盘根目录
(3)执行git clone git@github.com:jlccn/gitRepo2.git
备注:jlccn是本人的GitHub账户名;gitRepo2是上面第(1)建立的Repository name。

Windows下Git的使用 随笔 第24张 

运行后,在d盘自动创建目录gitRepo2,内容如下:

Windows下Git的使用 随笔 第25张

 

九、分支管理

1、分支基本操作

查看分支: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>

(1)创建并切换到dev分支

Windows下Git的使用 随笔 第26张 

备注:相当于两条命令git brance dev和git checkout dev,也可以使用最新的命令git switch -c dev

(2)查看分支

Windows下Git的使用 随笔 第27张 

(3)手动修改test.txt增加一行“第3行分支”,然后提交

Windows下Git的使用 随笔 第28张 

(4)切换回master分支

Windows下Git的使用 随笔 第29张 

备注:也可以使用git switch master

打开test.txt,会发现刚才添加的内容不见了,因为刚才提交是在dev分支上,不会影响到master分支。

(5)把dev分支合并到master分支上

Windows下Git的使用 随笔 第30张 

备注:上面的Fast-forward表示这次合并是“快进模式”,这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
禁用Fast forward可以加上参数--no-ff,完整命令git merge --no-ff -m "merge with no-ff" dev

打开test.txt,分支添加的内容已经有了。
(6)合并后删除dev分支

Windows下Git的使用 随笔 第31张 

2、解决冲突
当Git无法自动合并分支时,就必须先解决冲突,把Git合并失败的文件手动编辑下,再提交,合并完成。

例子:
(1)创建并切换到feature1分支

Windows下Git的使用 随笔 第32张 

(2)修改test.txt,增加一行“第4行分支feature1”,内容如下:

第1行
第2行
第3行分支
第4行分支feature1

(3)在feature1分支上提交

Windows下Git的使用 随笔 第33张 

(4)切换到master分支

Git会自动提示我们当前master分支比远程的master分支要超前1个提交。

Windows下Git的使用 随笔 第34张 

在master分支上把test.txt文件增加一行“第4行master分支”:

第1行
第2行
第3行分支
第4行master分支

提交master分支

Windows下Git的使用 随笔 第35张 

(5)这种情况下Git执行快速合并,会报错

Windows下Git的使用 随笔 第36张 

打开test.txt,内容如下:

第1行
第2行
第3行分支
<<<<<<< HEAD
第4行master分支
=======
第4行分支feature1
>>>>>>> feature1

git status可以查看冲突的文件

Windows下Git的使用 随笔 第37张 

(6)手动编辑test.txt内容并保存,然后再提交

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支

Windows下Git的使用 随笔 第38张 

 用带参数的git log可以看到分支的合并情况

Windows下Git的使用 随笔 第39张 

(7)删除feature1分支

Windows下Git的使用 随笔 第40张

3、Bug分支
当接到一个需要修复bug的优先任务时,手头工作没有完成时,没法提交。
这时可以先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
例子:
(1)创建并切换到dev分支

Windows下Git的使用 随笔 第41张 

(2)编辑test.txt,增加下面最后一行内容:

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支
第6行dev分支处理中...

(3)此时接到一个修复bug任务,可以使用git stash保存工作区的修改

Windows下Git的使用 随笔 第42张 

此时打开test.txt,会发现第(2)添加的最后一行内容不见了。

(4)假设在master分支上修复bug,切换到master分支上,并创建临时分支

Windows下Git的使用 随笔 第43张 

(5)模拟修复bug,手动编辑test.txt,内容如下,然后提交

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支:修复bug

Windows下Git的使用 随笔 第44张 

备注:留意本次提交的版本号d12d0fb,在后面有用到。

(6)切换master分支,并完成合并,最后删除issue-101分支

Windows下Git的使用 随笔 第45张 

(7)切换回dev分支

用git status显示工作区是干净的,用git stash list查看保存的工作现场

Windows下Git的使用 随笔 第46张 

恢复有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:

用git stash list查看,就看不到任何stash内容了:

Windows下Git的使用 随笔 第47张 

打开test.txt文件,内容如下(注意第5行内容不一样):

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支
第6行dev分支处理中...

(8)模拟完成dev任务,手动编辑test.txt,内容如下,然后提交

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支
第6行dev分支处理完成

Windows下Git的使用 随笔 第48张 

(9)修复dev分支的同个bug

dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。

使用git cherry-pick d12d0fb命令,复制一个特定的提交到当前分支。

Windows下Git的使用 随笔 第49张 

备注:因为修改的是同个文件,所以这里提示有冲突。
打开test.txt,内容如下:

第1行
第2行
第3行分支
第4行分支feature1
<<<<<<< HEAD
第5行master分支
第6行dev分支处理完成
=======
第5行master分支:修复bug

>>>>>>> d12d0fb... fixbug 101

修改为:

第1行
第2行
第3行分支
第4行分支feature1
第5行master分支:修复bug
第6行dev分支处理完成

然后再提交即可。

 Windows下Git的使用 随笔 第50张 

4、Feature分支
在dev分支开发时,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
但有时feature分支提交后,还没合并,feature分支的功能没用了,这时要删除分支,就要使用-D参数强制删除。
(1)当前是dev分支,切换并创建feature2分支

Windows下Git的使用 随笔 第51张 

(2)开发完后提交

Windows下Git的使用 随笔 第52张 

(3)切换加dev,准备合并,然后删除feature2分支

Windows下Git的使用 随笔 第53张 

(4)此时因某种原因新功能取消,删除feature2分支,用-d删除

Windows下Git的使用 随笔 第54张 

提示还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。

(5)强行删除

Windows下Git的使用 随笔 第55张 

备注:不删除没用的分支,也没什么影响,只是看起来比较乱。 

5、多人协作的流程

(1)首先,可以试图用git push origin <branch-name>推送自己的修改;
(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
(3)如果合并有冲突,则解决冲突,并在本地提交;
(4)没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
例子:
(1)查看远程库信息:git remote
(2)查看远程库详细信息:git remote -v
(3)推送分支:git push origin master

Windows下Git的使用 随笔 第56张 

小结:
本地新建的分支如果不推送到远程,对其他人就是不可见的;
并不是所有本地分支都需要往远程推送:
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,没必要推到远程;
feature分支是否推到远程,取决于是否和团队成员合作在上面开发。

十、标签管理  

1、打标签
切换到要打标签的分支上,输入命令git tag <name>打标签

Windows下Git的使用 随笔 第57张 

备注:默认标签是打在最新提交的commit上的。

2、历史提交的commit id打标签

Windows下Git的使用 随笔 第58张 

3、查看所有标签

Windows下Git的使用 随笔 第59张 

4、查看标签信息

Windows下Git的使用 随笔 第60张 

5、创建带有说明的标签,用-a指定标签名,-m指定说明文字

Windows下Git的使用 随笔 第61张 

6、用命令git show <tagname>可以看到说明文字:

Windows下Git的使用 随笔 第62张 

 7、删除标签

Windows下Git的使用 随笔 第63张 

8、推送某个标签到远程
因为创建的标签都只存储在本地,不会自动推送到远程。

Windows下Git的使用 随笔 第64张 

 Windows下Git的使用 随笔 第65张 

 9、如果标签已经推送到远程,要删除远程标签,要先从本地删除,再从远程删除

Windows下Git的使用 随笔 第66张 

 Windows下Git的使用 随笔 第67张

 

 

 

参考:https://www.liaoxuefeng.com/wiki/896043488029600

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄