一、Git下载

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

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

二、安装

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

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

Git Bash:一个封装过的cmd命令行,并在其中加入了一些新的命令与功能。(linux风格)

Git CMD(Deprecated):cmd命令行界面,提示已弃用。(windows风格)

Git GUI:可视化图形界面。

三、Git工作流程

1、工作流程图

Workspace:工作区,电脑里能看到的目录

Index/Stage:暂存区,存放在.git/index中,所以暂存区有时也叫作索引(index)。

Repository:版本库(本地仓库),工作区的隐藏目录.git

Remote:远程仓库,托管代码的服务器

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

3、Git常用命令速查表

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

打开Git Bash,界面如下:

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

git config --global user.name "用户名"

git config --global user.email "邮箱"

五、创建版本库(repository)

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

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

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

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

六、Git的基本操作

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

(1)在d:/gitRepo手动建立文件test.txt,内容为“第1行”;

(2)打开Git Bash执行cd d:/gitRepo进入此目录;

(3)先后执行git add和git commit命令,把文件提交到暂存区,再把暂存区提交到版本库;

(4)执行git status查看状态,git提示工作区是干净的,没有什么需要提交;

(5)编辑文件test.txt,加入一行内容“第2行”;

(6)执行git status查看状态,git提示文件被修改过了,但还没提交。使用git add ...提交,使用git restore ...取消修改;

(7)执行git diff test.txt,比较工作区和暂存区;(如果使用git diff HEAD test.txt则是比较工作区和版本库)

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查询

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撤回工作区的修改;

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

删除也是一种修改,删除的方式有2种:

如果使用rm相当于在资源管理器里面直接删除,只删除工作区的文件,可以直接使用checkout还原;

如果使用git rm则是删除工作区和暂存区的文件,需要先使用reset,再使用checkout还原(只用这个会报错);

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

七、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 "自己的邮箱地址",

过程中会提示输入文件名,直接按回车用默认文件名,之后提示输入密码,按回车表示不需要输入密码。

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

3、登陆GitHub ->右上角头像处选择“Settings”-> SSH and GPG keys -> New SSH key ->

Title随便写,在Key文本框里粘贴id_rsa.pub文件的内容 -> 点击“Add SSH key”保存。

保存后如下:

4、测试SSH key

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

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

八、GitHub仓库的操作

1、GitHub创建Git仓库

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

(1)登陆GitHub创建仓库

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

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

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

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

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

执行命令:git push -u origin master

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

本人是win7系统,推送时报错ssh:connet to host github.com port 22:Connection timed out

应该是22端口被防火墙禁用了,启用方法如下:

控制面板(右上角选择查看方式为大图标)—>防火墙—>高级设置—>高级设置—>出站规则—>最右边 新建规则“新建出站规则向导”—>选择第二个“端口”—>下一步,默认TCP,默认特定远程端口,后面输入22 —>下一步,允许连接—> 下一步—>下一步,名称随便输入如“22端口”—>完成。

重新执行git push命令,成功了。

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

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。

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

九、分支管理

1、分支基本操作

查看分支:git branch

创建分支:git branch

切换分支:git checkout 或者git switch

创建+切换分支:git checkout -b 或者git switch -c

合并某分支到当前分支:git merge

删除分支:git branch -d

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

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

(2)查看分支

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

(4)切换回master分支

备注:也可以使用git switch master

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

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

备注:上面的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分支

2、解决冲突

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

例子:

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

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

第1行

第2行

第3行分支

第4行分支feature1

(3)在feature1分支上提交

(4)切换到master分支

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

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

第1行

第2行

第3行分支

第4行master分支

提交master分支

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

打开test.txt,内容如下:

第1行

第2行

第3行分支

<<<<<<< HEAD

第4行master分支

=======

第4行分支feature1

>>>>>>> feature1

git status可以查看冲突的文件

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

第1行

第2行

第3行分支

第4行分支feature1

第5行master分支

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

(7)删除feature1分支

3、Bug分支

当接到一个需要修复bug的优先任务时,手头工作没有完成时,没法提交。

这时可以先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

例子:

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

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

第1行

第2行

第3行分支

第4行分支feature1

第5行master分支

第6行dev分支处理中...

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

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

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

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

第1行

第2行

第3行分支

第4行分支feature1

第5行master分支:修复bug

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

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

(7)切换回dev分支

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

恢复有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

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

打开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分支处理完成

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

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

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

备注:因为修改的是同个文件,所以这里提示有冲突。

打开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分支处理完成

然后再提交即可。

4、Feature分支

在dev分支开发时,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

但有时feature分支提交后,还没合并,feature分支的功能没用了,这时要删除分支,就要使用-D参数强制删除。

(1)当前是dev分支,切换并创建feature2分支

(2)开发完后提交

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

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

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

(5)强行删除

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

5、多人协作的流程

(1)首先,可以试图用git push origin 推送自己的修改;

(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

(3)如果合并有冲突,则解决冲突,并在本地提交;

(4)没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

例子:

(1)查看远程库信息:git remote

(2)查看远程库详细信息:git remote -v

(3)推送分支:git push origin master

小结:

本地新建的分支如果不推送到远程,对其他人就是不可见的;

并不是所有本地分支都需要往远程推送:

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

bug分支只用于在本地修复bug,没必要推到远程;

feature分支是否推到远程,取决于是否和团队成员合作在上面开发。

十、标签管理

1、打标签

切换到要打标签的分支上,输入命令git tag 打标签

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

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

3、查看所有标签

4、查看标签信息

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

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

7、删除标签

8、推送某个标签到远程

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

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

window下git的用户切换_Windows下Git的使用相关推荐

  1. 如何在 Linux下从普通用户切换到root用户

    1.输入pwd,查看当前用户目录: cheng@Linuxprobe Desktop]$ 这个的含义,其中Linuxprobe Desktop指的是当前的用户,Linuxprobe Desktop指的 ...

  2. window安装python3装环境变量_Windows下的Python安装与环境变量的配置

    Windows下的Python安装与环境变量的配置 第一步:python下载: 第二步:python安装: 双击下载包,进入Python安装向导. 此处省略安装时的配图,下一步.下一步即可.但请要注意 ...

  3. windows下的工具链 树莓派_Windows下交叉编译Qt 5.14.2至树莓派平台 QEMU模拟树莓派...

    前些天有几个项目都打算用树莓派+Qt进行开发,可以手头没有树莓派设备,而且由于硬盘空间不太够了,想直接在Windows下开发,于是经过一番折腾,就有了这篇文章.... 如果感觉编译要等很久.很难受,可 ...

  4. windows下搭建mysql集群_Windows下搭建MySQL集群

    本文将讨论在Windows下搭建MySQL集群的步骤和搭建过程中应当注意的问题. 由于机器数量和性能有限,搭建环境为一台宿主机(IP:10.200.178.191),一台虚拟机(IP:10.200.1 ...

  5. windows下python视频加速调节_Windows下python+ffmpeg实现批量提取、切割视频中的音频...

    废话不说,直接上代码 #遍历所有mp4文件名->文件名改为字母形式->fffmpeg批量提取音频.切割音频->改回中文名 import os import subprocess cu ...

  6. [Git/Github] ubuntu 14.0 下github 配置

    转载自:http://www.faceye.net/search/77573.html 一:创建Repositories 1:首先在github下创建一个帐号.这个不用多说,然后创建一个Reposit ...

  7. linux系统下删除vsftp用户,Linux下VsFTP和ProFTP用户管理高级技巧 之一

    Linux下VsFTP和ProFTP用户管理高级技巧 FTP服务时互联网上比较古老的一种应用,至今Interner应用面非常广泛,但令管理员头痛不已的是其用户管理,既多且杂,如何解决这一问题呢?使用M ...

  8. ubuntu导入第三方库_ubuntu用户切换、配置Python开发环境与所需的第三方库

    一.用户切换 普通用户切换到root用户 登录ubuntu后,按上组合键CTRL+ALT+T进入终端界面,一般终端界面默认为普通用户权限模式,如何从普通用户进入root用户,有如下方法: 1.按上su ...

  9. ubuntu root 用户切换到普通用户

    ubuntu中root和普通用户切换 ubuntu登录后,默认是普通用户权限,那么普通用户权限和root权限如何切换呢,下面总结下它们之间如何切换. 普通用户切换到root用户 登录ubuntu后,按 ...

  10. git branch分支切换和合并

    创建与合并分支 https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424 在版本回退里,你已经知道,每次提交,Git都把它们串成 ...

最新文章

  1. 深度解析 Lucene 轻量级全文索引实现原理
  2. 2018 CVPR GAN 相关论文调研 (自己分了下类,附地址哦)
  3. Spring.NET 1.3.1 新特性探索系列1——ASP.NET MVC的依赖注入
  4. 搭建AI Studio 中Python开发环境
  5. 登录 googlecloud,链接数据库
  6. 收藏 | 700页NLP算法在百度、阿里、腾讯等一线大厂的最佳实践!PDF限时领!
  7. 优先队列(个人模版)
  8. 机器学习-关联之Apriori算法原理及实战
  9. day14 Python函数
  10. JGrid有用的收藏
  11. 根据一张表更新另一张表
  12. 高可用的分布式Hadoop大数据平台搭建,超详细,附代码。
  13. 机器学习与医学应用基础(超星尔雅学习通)--答案
  14. MATLAB FFT与fftshift
  15. java软尾山地车评测_GT Sensor X Pro 软尾山地自行车测评
  16. 得物购买截图生成_iPhone12订单生成器网页版-iPhone12订单生成器网页版链接分享预约 v1.0...
  17. Xposed获取微信好友列表(通讯录),看看这是你要的详细吗
  18. DS1302 万年历时钟乱跳数值 85 85 85 11 11 11
  19. 公关策划书的标准格式及撰写要素
  20. 支付系统的核心,账务系统都需要有哪些功能

热门文章

  1. cmd窗口连接mongodb服务端
  2. mysql建表时添加时间默认值只存储时分秒且自动存储
  3. BGP增强特性(华为设备)
  4. 浅议组播(一文看懂组播)
  5. 初始化Metasploit-Framework
  6. 兄弟们,请求支援,怎么实现互通,全部都互通的
  7. 用 JMeter 测试 MySQL 数据库
  8. 22、redis中数据库默认是多少个db 及作用?
  9. 【ActiveMQ】消息生产者自动注入报错:Could not autowire. No beans of #39;JmsMessagingTemplate#39; type found...
  10. 网络互撕是群体极化的典型症状