Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目。B站尚硅谷Git学习笔记

一、Git的常用命令

1.git工作机制
工作区和暂存区的文件都可删除,但是提交到本地库则不可删除,有历史记录

2.历史版本
2.1查看历史版本
1)基本语法
git reflog 查看版本信息
git log 查看版本详细信息
2)案例实操

2.2版本穿梭
1)基本语法
git reset --hard 版本号
2)案例实操
从第3版穿梭至第2版

二、Git分支操作
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。


1.切换分支
1)基本语法
git checkout 分支名
2)案例实操

2.合并分支
1)基本语法
git merge 分支名
2)案例实操 在 master 分支上合并 hot-fix 分支
即hot-fix分支覆盖master分支

3.产生冲突及解决
1)产生冲突的原因
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

2)解决冲突
①编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:
<<<<<<< HEAD
当前分支的代码
=======
合并过来的代码
>>>>>>> hot-fix
②添加到暂存区
③执行提交(注意:此时使用 git commit 命令时不能带文件名)
错误示例:(提交了文件名,git不知道是哪个hello.txt)

正确提交:

4.Git底层其实是指针
Git 切换版本,底层其实是移动的 HEAD 指针
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。 HEAD 如果指向 master,那么我们现在就在 master 分支上。 HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。

三、GitHub
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
➢ 局域网 ✓ GitLab
➢ 互联网 ✓ GitHub(外网) ✓ Gitee 码云(国内网站)
1.远程仓库操作

1.1创建远程仓库别名
1)基本语法
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
2)案例实操

1.2推送本地分支至远程仓库
1)基本语法
git push 别名 分支
2)案例实操

推送成功!

1.3拉取远程库到本地库
1)基本语法
git pull 远程库地址别名 远程分支名
2)案例实操
即同步本地库的代码为远程库修改的代码

1.4邀请加入团队
1)选择邀请合作者

2)填入想要合作的人

3 ) 复 制 地 址 并 发 送 给 该 用 户

4)在 atguigulinghuchong 这个账号中的地址栏复制收到邀请的链接,点击接受邀请。

5)成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库。
1.4克隆远程仓库到本地
1)基本语法
git clone 远程地址
2)案例实操
令狐冲 克隆岳岳的远程库代码到本地

小结:clone 会做如下操作:
1、拉取代码。
2、初始化本地仓库。
3、创建别名(自动为origin)
2.团队协作
1)团队内协作
令狐冲克隆岳岳的代码到本地库后,
可以修改本地代码-->加入本地暂存区-->提交到本地库->推送远程库(要加入团队)
2)跨团队协助
在东方不败的 GitHub 账号里的地址栏复制收到的链接,然后点击 Fork 将项目叉到自 己的本地仓库。

东方不败在线编辑代码后,接下来点击上方的 Pull请求,并创建一个新的请求。

如果代码没有问题,可以点击Merge pull reque 合并代码

3.SSH免密登录

1)进入用户根目录,运行命令生成.ssh 秘钥目录

2)进入.ssh 目录查看文件列表:一个公钥、一个私钥

3)复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。
四、Idea集成Git
1.切换版本
commit代码到本地库后,可以切换版本
在 IDEA 的左下角,点击 Version Control(Git),然后点击 Log 查看版本
右键选择要切换的版本,然后在菜单里点击 Checkout Revision。

切换后,头指针指向了第二个版本,代码也变为了第二个版本

2.创建分支和切换分支
选择 Git,在 Repository 里面,点击 Branches 按钮。

在弹出的 Git Branches 框里,点击 New Branch按钮。
填写分支名称,创建 hot-fix 分支。checkout branch表示切换到hot-fix分支
也可以在右下角切换 回 master分支
3.合并分支(正常)


4.合并冲突并解决冲突
1)合并冲突
如图,如果 master 分支和 hot-fix 分支都修改了代码,在合并分支的时候就会发生 冲突


2)解决冲突
点击 Conflicts 框里的 Merge按钮,进行手动合并代码。


手动合并完代码以后,点击右下角的Apply按钮。

五、Idea集成GitHub和Gitee
1.GitHub(国外代码托管中心)
1)设置 GitHub 账号

2)分享工程到 GitHub



3)push 推送本地库到远程库

默认是HTTPS,这里我们使用SSH,先复制远程库SSH链接

再自定义远程链接



注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致, push 的操作是会被拒绝的。也就是说,要想 push 成功,一定会先检查下远程库跟本地 代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地 代码更新到最新以后,然后再修改,提交,推送!
4)pull 拉取远程库到本地库
若修改了远程库的代码,即远程库的代码版本比本地库的更新,本地库需pull拉取远程库的代码
注意:pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动 合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
5)clone 克隆远程库到本地


2.Gitee码云(国内代码托管中心)
1)IDEA 安装码云插件
云服务器在国内,用 HTTPS 链接即可,没必要用 SSH 免密链接。



2)IDEA 连接码云
Idea 连接码云和连接 GitHub 几乎一样,首先在 Idea 里面创建一个工程,初始化 git 工 程,然后将代码添加到暂存区,提交到本地库,这些步骤上面已经讲过,此处不再赘述。
将本地代码push到码云远程库

2)码云复制 GitHub 项目
码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。


如果 GitHub 项目更新了以后,在码云项目端可以手动重新同步,进行更新

六、GitLab-自建代码托管平台
GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。