新鲜出炉!全网最全!Git从入门到精通

1、Git简介

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper

1.1 什么是版本控制?

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技术。

1.2 为什么要有版本控制?

没有进行版本控制或者版本控制本身就缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具。(多人开发就必须要使用版本控制)

使用版本控制之后可以给你带来的一些便利:

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

1.3 版本控制的分类

1.集中版本控制 SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。 

2.分布式版本控制 Git

Git的优势就是:每个人都拥有全部的代码,可以避免一些安全隐患。不会因为服务器孙环或者网络问题,造成不能工作的情况。

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。 

1.4 Git和SVN的主要区别

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

 

  •  Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!


 2、Git安装

1.Git官网

地址:https://git-scm.com/

2.下载后一步一步

 

安装完成后,在桌面点击右键,选择Git Bash Here,点击后出现下面的界面就是安装成功了。


3、Git结构

Git是一个开源的分布式版本控制系统。本地结构如下图。


 


4、代码托管中心

我们已经有了本地库,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?

4.1 代码托管中心的作用

  • 代码托管中心是帮我们维护远程库。
  • 介绍一下本地库和远程库的交互方式。

4.1.1 团队内部协作


 

4.1.2 跨团队协作

 

4.2 托管中心的类别

  • 局域网环境下: 可以搭建 GitLab服务器作为代码托管中心,GitLab可以自己去搭建。
  • 外网环境下:可以由GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建。

5、初始化本地仓库

5.1 创建一个文件夹

008400890d209a2e9f7769bb8da9c8ec.png

5.2 打开Git终端

1.打开Git Bash Here,可以设置先关的参数。在Git中命令和Linux是一样的。

2.查看git安装版本号

git --version

 3.清屏命令

clear

 4.设置签名和邮箱

git config --global user.name "luyh"
git config --global user.email "74438xx38@qq.com"

 5.本地仓库初始化

git init


.git 目录是隐藏的,可以设置显示隐藏的文件夹

查看.git下文件

注意:.git目录下的文件和目录等内容不能删除,否则会出现问题


6、git add和git commit

6.1 创建一个文件

6.2 将文件提交到暂存区

git add firstClass.txt

6.3 将暂存区的文件提交到本地库

git commit -m "这是提交的第一个文件 firstClass.txt" firstClass.txt

注意事项:
1不在本地仓库的文件,git无法管理;
2放在本地仓库中,必须进行git add和git commit操作后才能提交到本地库。


7、git status

git status查看暂存区和工作区的状态。

git status

 7.1 创建一个文件,查看状态

7.2 将文件通过git add命令提交到暂存区

查看状态

7.3 将文件通过git commit命令提交到本地库

查看状态

7.4 修改second.txt文件

查看状态

7.5 重新提交至缓存区

7.6 将缓存区的文件提交到本地库

查看状态


8、git log命令

git log查看日期从近至远的日志信息。

8.1 查看日志记录

8.2 查看超过一屏的历史日志

当历史记录过多的时候,查看日志的时候,有分页分屏效果,分多页展示

上一页和下一页的操作命令如下:

下一页:空格

上一页:B

退出: Q

结尾显示:END

8.3 四种日志展示方式

 1.日志展示方式一

git log

 2.日志展示方式二

git log --pretty=oneline

3. 日志展示方式三

git log --oneline

4. 日志展示方式四

git reflog

 注意:
1. 多了HEAD@{数字},数字的含义是指针回到当前这个版本需要走的步数。


9、git reset命令

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset [--soft | --mixed | --hard] [HEAD]

9.1 新建一个文件,提交至本地库

9.2 修改几次内容后,提交到本地库

9.3 回退到指定的版本

提示:在窗口中,复制: 选中,粘贴: 右键点击paste。

9.4 --hard|--mixed | --soft 的区别

  1. --hard参数:本地库指针移动,暂存区和工作区的指针都会重置。
  2. --mixed参数:本地库和暂存区的指针移动,工作区的指针不会移动。
  3. --soft参数:本地库的指针移动,暂存区和工作区的指针不会移动。

10、git reset找回本地库删除的文件

10.1 找回本地库删除的文件

1. 新建一个文件test2.txt;

2. 将test2.txt文件add到暂存区;

3. 将test2.txt文件commit到本地库;

4. 删除工作区的test2.txt文件;

5. 将删除操作同步到暂存区;

6. 将删除操作同步到本地库;

7. 查看日志;

8. 找回本地库删除的文件。

其实就是,将版本回退到新增文件的那个历史版本即可。


11、git reset找回暂存区删除的文件

11.1 找回暂存区删除的文件

1. 删除工作区文件test2.txt;

2. 将删除操作同步到暂存区;

3. 删除不想做了,找回暂存区删除的文件。


12、git diff命令

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

$ git diff [file]

 1. 新建一个文件,先添加到暂存区,再提交到本地库

2. 更改工作区文件test3.txt的文件内容,现在工作区和暂存区的内容不一致了。

 8e1ba2db908c181b76ab29549ea0f301.png

3. 比较工作区和暂存区中文件的差异(git diff [file])

4. 比较工作区和暂存区中所有文件的差异(git diff)

5.比较暂存区和工作区的文件差异

git diff [历史版本][文件名]
或者
git diff HEAD [文件名]

6.比较「暂存区」与「给定提交 ID」的差异

git diff --cached [索引]

7.比较两次提交的差异

git diff [索引1]...[索引2]


13、git分支管理

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git 分支实际上是指向更改快照的指针。

有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

●分支管理示意图:

​​​​●分支管理的优点:

  1. 多个分支并行开发,互不影响,提高工作效率;
  2. 单独的分支,可以独自管理,也可以删除,不会影响其他分支。

13.1 查看分支

1.在工作区创建一个文件test4.txt,然后添加到缓存区,再提交到本地库

2.查看分支

git branch -v

3.创建分支

git branch [branch名称]

4.切换分支

git checkout [branch名称]


13.2 分支冲突

1. 进入dev分支,增加内容

2. 进入master分支,增加内容

3. 切换到dev分支查看

4.切换到master分支,进行合并操作

git merge [branch名称]

注意事项:什么时候出现冲突呢?在同一文件的同一位置有修改。
解决方法:公司内部协商解决,人为决定,留下最合适的内容。

通过git add 和git commit解决冲突。

  • 保留需要的内容

  • 将修改的工作区内容提交到暂存区。

  • 将暂存区的内容提交到本地库


13.3 删除分支

git branch -d (branchname)


14、远程库使用GitHub

14.1 注册GitHub账号

GitHub官网地址如下:(https://github.com/)

点击右上角sign up按钮,按照提示一步步注册,注册完成后如下图所示。


14.2 进行本地库和远程库的交互

1.回顾之前介绍的本地库和远程库的交互图

2. 创建本地库

3. 创建GitHub远程仓库

创建成功后,如下图所示:

4. 本地创建远程库的别名

如何找到远程库的地址?点击下图的仓库名

进入后,就可以看到仓库的地址

远程库的地址如下:
https://github.com/lous1981/GitRespR.git,名字非常长,不方便操作。因此,在Git本地将地址保存,通过别名访问。

git remote -v
git remote add [别名] [远程库地址]

58d507b442f89bedba50bb6b4df7e71d.png

5.推送本地库到远程库 git push操作

git push [远程库别名] [推送的代码分支]

查看远程库的内容

注意:如果GitHub时因为网络等等原因push不成功,可以试一下执行下面的操作,然后再push,可以试多次。

6.远程库的克隆操作 git clone

  • 远程库地址复制

git clone [远程仓库地址]

  • 进行git clone克隆操作

 

克隆操作完成的事情:
1.初始化本地库;
2.将远程库内容完整克隆到本地;

cd6248d22f3221c52f8e8eed0e2ef1a5.png

3.创建远程库别名。

8b033e306062342f3b7dc0f92e02ea47.png


15、远程库邀请加入团队

15.1 普通程序员修改代码

1. 普通程序员新增文件,添加到暂存区,提交到本地库,然后push到远程库

问题:我没有录入账户信息,怎么提交成功了呢?也没有提示错误。

原因:git在本地有缓存,默认使用的是缓存的账号。

解决办法:删除缓存

WIN 11 操作按照下图所示:

选择Windows凭证,查看git的凭证。

2. 重新push,发现权限不足,需要申请权限。

3. 加入团队

登录项目经理的账号,邀请普通程序员。

邀请成员:

输入成员账号:

发起邀请,复制邀请链接:

登录被邀请人的GitHub账号,接受邀请(将刚复制的链接,在浏览器地址栏输入)

或者在通知栏有邀请通知,点击进入接受邀请。

再次提交


16、远程库修改的拉取

16.1 登录项目经理的账号,确认远程库是否更新

16.2 查看项目经理本地仓库

16.3 远程库fetch操作

git fetch [远程库别名] [远程库分支]

在fetch操作执行之后,只是将远程库的内容下载到本地,工作区的内容并没有更新,还是原来的内容。

16.4 确认远程库内容

如果发现所有内容都已经正确更新,则接下来就可以合并了。

16.5 本地库git merge合并操作

合并前先将分支切换回来。

git merge [远程库别名]/[远程库分支]

16.6 git pull 拉取操作

git pull 操作相当于git fetch和git merge

git pull [远程库别名] [远程库分支]

操作对比:

fetch+merge:起保险和慎重作用;

pull:代码简单,省事使用


17、协作开发解决冲突问题

17.1 项目管理人员新增文件

17.2 项目普通人员操作

  1. 先拉取最新代码

17.3 项目普通人员修改同一个文件的同一个位置并提交

17.4 项目管理人员修改同一个文件的同一位置

添加暂存区,提交到本地库,然后push到远程库,发现冲突。

问题:发现冲突了怎么办呢?

解决办法:先拉取,然后修改冲突,最后在push到远程库

  • 先拉取最新代码

  • 比较内容:

  • 人工解决冲突(保留合适的,删除不当的)

  • 解决完冲突后,再添加到暂存区,提交到本地库,推送到远程库

  • 确认内容是否已经更新


18、跨团队合作

18.1 回顾跨团队合作方式

 

18.2 跨团队合作

1. 得到远程库的地址:GitHub - lous1981/GitRespR: 创建一个远程仓库,名称GitRespR

2. 进入要fork仓库的账号,复制远程库地址到浏览器的地址栏,然后点击进入

3. 执行下面的fork操作。

4. git clone克隆到本地进行修改

66c2cef8ce2144479d59fc8d624ea34c.png

5. 新增文件后提交,push到远程库

6. 进行pull request操作

创建新的pull request请求

进入新页面,创建新的pull request请求

输入pull request请求的相关信息:

创建pull request请求成功:

7. 项目管理员进行合并

管理员进入仓库,查看pull request请求信息:

 在进入请求详情页查看,可以进行相互交流确认。

审核通过之前,查看具体提交的内容是否正确。

如果确认审核通过,点击下面的按钮确认。

确认合并后的代码是否同步。


19、SSH免密登录

19.1 进入用户主目录

cd ~

19.2 执行命令,生成一个.ssh的目录

ssh-keygen -t ed25519 -C [GitHub注册账号对应的邮箱]

输入命令,三次回车确认默认值。

.ssh目录下有两个文件

19.3 打开文件id_ed25519,复制里面的内容

19.4 进入GitHub管理后台
选择Settings,点击进入

选择下面的菜单

进入如下菜单:

增加一个sshkey,名字可以自己定义,内容为之前复制的内容。

19.5 测试SSH秘钥

  • 打开 Git Bash,输入以下内容:
ssh -T git@github.com
  • 通过ssh 连接到GitHub,可能会看到类似如下的警告:

The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?

  • 验证所看到消息中的指纹是否匹配 GitHub 的公钥指纹。 如果是,则输入 yes:

Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

19.6生成SSH秘钥后,就可以正常使用
给ssh的远程地址起别名。
获取ssh远程地址,如下图:

给远程ssh地址起别名

git remote add origin_ssh [远程ssh地址]

测试是否能正确使用。

使用SSH:
优点:方便,不用每次都进行身份验证;
缺点:只能针对一个账号


20、IDEA集成Git

20.1 IDEA配置Git版本控制

20.2 本地库的初始化

36fdcb7b7a43dc19e8a818502d5e7403.png

本地库初始化完成,生成了.git目录。

7f80237b1b55bebd9ae57f038ddccb28.png

20.3 添加文件

添加新文件时,会提示,是否add

进行add和commit操作

提交完成后的信息

再次修改文件时,文件前面的内容会显示绿色颜色块。


21、IDEA同步远程库

21.1 合并不相干的分支

通过下面的命令,把两段不相干的 分支进行强行合并。

git pull origin master --allow-unrelated-histories

 21.2 进行push推送操作

通过下面的命令,进行push推送。

git push -u origin master -f

1acc03ce5467fcac1946e7aa7a657434.png

到这里远程库和本地库就同步了。

21.3 修改文件,然后push

确认提交信息。

可以在commit同时push到远程库。

注:开发时,先pull操作,再push操作,不要直接push操作。


22、IDEA克隆远程库

22.1 选择从版本控制创建项目

22.2 克隆远程库

22.3 克隆到本地

22.4 查看项目目录

既是本地仓库,又是工作空间。


23、IDEA解决冲突

23.1 修改文件Student.java

23.2 提交修改并push到远程库

确认结果:

23.3 IDEA修改Student.java

修改文件

修改后push

push失败

进行Merge操作解决冲突。

避免冲突:

  1. 团队开发避免修改同一个文件,团队内部协商好。
  2. 在修改一个文件前,先进行pull操作,再进行push操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值