超详细的Git学习笔记
从B站搜到的尚硅谷视频学习了Git,记录了一下学习的内容,收获很大
学习地址:
https://www.bilibili.com/video/BV1vy4y1s7k6?p=11&share_source=copy_web
文章目录
- 超详细的Git学习笔记
Git介绍 分布式版本控制工具 VS集中式版本控制工具
- Git是什么?
免费开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
- Git有什么优点?
易于学习,占地面积小,性能极快。具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion 、CVS、Perforce和ClearCase 等版本控制工具
-
什么是版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
版本控制最重要的是可以记录文件修改历史记录,从而让用户能够看到历史版本,方便版本切换
(情景:自己在写东西时,不确定修改后的下一版本是否比上一个版本好,这时候就需要退回上一个版本,把每个版本的文件都另存一份,就能轻松退回上一个版本,就能实现一个简单的版本控制)
-
为什么要用到版本控制工具?
个人开发过渡到团队协作
(情景:在团队协作开发的时候,甲乙两个同学都需要修改自己那部分内容,他们将原先的内容从公司的服务器上下载下来,然后进行修改,修改完成时,如果甲乙都上传文件并覆盖,那么必定有一个同学的被另一个同学的替换掉,这时候就需要版本控制工具,来将两个人修改的结合起来)
-
版本控制工具
-
Git工作机制
工作区(代码存放的本地目录) ——【通过
git add
命令添加到暂存区】—— 暂存区(在工作区写代码后,添加到暂存区,暂存区的代码是可以删除和修改的) ——【通过git commit
命令提交到本地库,本地库的代码是不能删除和修改的】—— 本地库 ——【通过git push命令推送到远程库】——远程库
-
Git和代码托管中心
- 局域网
- GitLab
- 互联网
- GitHub(外网)
- Gitee码云(国内网站)
- 局域网
Git安装 基于官网发布的最新版本2.32.0.2 安装
Git官网:Git (git-scm.com),可以在搜索引擎直接搜,通常第一个就是Git
下载安装步骤:
-
进入官网后,点击右边的小电脑上面的Download for Windows,电脑就能自动下载Git
-
下载完成后打开Git安装文件
-
协议界面直接下一步
-
选择好安装目录后下一步
-
Select Components选项内容勾选(使用默认的就行,然后直接下一步):
-Additional icons //创建快捷方式 --On the Desktop //桌面上 -Windows Explorer integration //右键菜单 ✔ --Git Bash Here //Git的命令行客户端 ✔ --Git GUI Here //Git的GUI客户端(图形化界面) ✔ -Git LFS (Large File Support) //大文件的支持 ✔ -Associate .git* configuration files with the default text editor //配置默认编辑器 ✔ -Associate .sh files to be run with Bash //关联.sh格式文件 ✔ -Check daily for Git for Windows updates //每天检查Git是否使用Windows更新 -(NEW!)Add a Git Bash Profile to Windows Terminal //(新!)将 Git Bash 配置文件添加到窗口终端
-
Select Start Menu Folder选择开始菜单的位置,下一步
-
Choosing the default editor used by Git选择默认编辑器,根据自己的情况而定 下一步(视频里用的Vim,也可以用自己熟悉的编辑器)
-
Adjusting the name of the initial branch in new repositories是否要修改初始化分支的名字 默认让Git决定就行 下一步
-Let Git decide //让Git决定,以后无论创建哪个库,都是用master作为名字(默认) -Override the default branch name for new repositories //自定义初始化分支名字
-
Adjusting your PATH environment是否要修改环境变量 根据自己的情况而定 下一步
-Use Git from Git Bash only //只在Git Bash客户端里面使用Git(不会修改环境变量)(默认) -Git from the command line and also from 3rd-party software //可以在Git Bash里面使用Git,也可以在第三方软件的控制台等里面使用Git -Use Git and optional Unix tools from the command Prompt //会修改掉一些Windows工具(一般不选这个)
-
Choosing HTTPS transport backend选择后台客户端连接协议,默认OpenSSL就行了 下一步
-Use the OpenSSL library //使用OpenSSL协议进行连接 -Use the native Windows Secure Channel library
-
Configuring the line ending conversion配置行末换行符 默认选第一个就行 下一步
-Check Windows-style ,cimmit Unix-style line endings //自动选择样式 -Checkout as-is ,commit Unix-style line endings -Checkout as-is ,commit as-is
-
Configuring the terminal emulator to use with Git Bash配置Git Bash终端类型 默认选第一个就行 下一步
-Use MinTTY(the default terminal of MSYS2) -Use Windows' default console window //这个需要用dos命令
-
**Choose the default behavior of
git pull
**选择默认的从远程库拉取代码到本地库的行为 默认就行 下一步-Default(fast-forward or merge) -Rebase -Only ever fast-forward
-
Choose a credential helper凭据管理器 选第一个 下一步
-Git Credential Manager Core //选择跨平台的凭据管理器 -Git Credential Manager //选择windows的凭据管理器 -None
-
Configuring extra options其他配置
-Enable file system caching //使用文件缓存机制,默认勾选 -Enable symbolic links //使用符号连接,勾选
-
Configuring experimental options 实验室功能 视频中不勾选 然后安装
-Enable experimental support for pseudo consoles //允许在Git Bash里面运行第三方程序 -Enable experimental built-in file system monitor //启用实验内置文件系统监视器 (自动允许内置文件系统监视器,以加快包含许多文件的工作树中的常见操作,如`git status` ,`git add`,`git commit`等 这个视频中的Git版本没有,应该可以勾选
-
然后就安装完成了,安装完成后在桌面右击可以看到Git的快捷菜单
Git命令 基于开发案例 详细了解git的常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git rm --cached 文件名 | 删除暂存区文件 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
设置用户签名
-
鼠标右击Git Bush Here
-
输入下面的命令并回车(用户名和邮箱输入自己定的用户名和邮箱)
git config --global user.name 【这里写用户名】 git config --global user.email 【这里写邮箱】
说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的.Git首次安装必须设置一下用户签名,否则无法提交代码
注意:这里的用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系
初始化本地库
查看本地库状态
初始化好的本地库,就可以查看本地库的状态了,使用命令git status
就可以查看了
什么项目都没有创建的情况下 会显示
On branch master
No commit yet
nothing to commit (create/copy files and use "git add" to track)
然后再用git status
这时候会显示(发现一个未被追踪过的文件,需要用git add
命令添加暂存区)
On branch master
No commit yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
添加暂存区
输入命令git add 【这里输入文件名】
我的是git add hello.txt
,就把文件存到暂存区
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
用git rm --cached 【文件名】
可以删除暂存区的内容,git rm --cached hello.txt
提交本地库
使用命令git commit -m "日志信息" 文件名
将暂存区的文件提交到本地库,形成自己电脑上的历史版本
git commit -m “first commit” hello.txt
执行后再允许 git status 会显示
On branch master
nothing to commit, working tree clean
可以通过 git reflog
查看历史记录,输入后会显示
c5b235a (HEAD -> master) HEAD@{0}: commit (initial): first commit
//其中的前7位是缩减版的版本号,是版本号的前七位
//(HEAD -> master)代表指针指向当前版本
可以通过git log 查看版本的详细信息,输入后会显示
commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e (HEAD -> master) //版本号
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:29:03 2021 +0800
first commit
修改文件
修改自己的文件,修改完保存,然后输入命令git status
,会显示
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
//检测到文件被修改了,需要重新添加暂存区,提交本地库
使用git add hello.txt
和 git commit -m "second commit" hello.txt
之后 显示如下
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master 622bb3c] second commit
1 file changed, 1 insertion(+), 1 deletion(-)
此时输入git log
就可以查看历史版本的详细信息,如下
commit 622bb3c70c8270ff345b61856c77787e8c77d10e (HEAD -> master)
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:41:51 2021 +0800
second commit
commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:29:03 2021 +0800
first commit
版本穿梭
使用 git reset --hard 【版本号(前七位就行)】
先使用git reflog
查看版本信息,显示
622bb3c (HEAD -> master) HEAD@{0}: commit: second commit //此时指向的是第二个版本
c5b235a HEAD@{1}: commit (initial): first commit
然后使用git reset --hard c5b235a
,此时指向第一个版本,此时会发现目录下文件的内容也变成了第一个版本的内容,用git reflog
命令显示如下
c5b235a (HEAD -> master) HEAD@{0}: reset: moving to c5b235a
622bb3c HEAD@{1}: commit: second commit
c5b235a (HEAD -> master) HEAD@{2}: commit (initial): first commit //此时指向的是第一个版本
能从第二个版本切到第一个版本,同时也可以再切回第二个版本,切完以后会改变提交的文件内容
Git分支操作 分支特性 分支创建 分支转换 分支合并 代码合并冲突解决
什么是分支
在版本控制过程中,同时推进多个任务,可以为每个任务创建单独的分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,(情景:可以想象成副本,主分支的已经上线使用,然后需要加入新的功能的时候,把主分支的内容拷贝下来,作为一个分支,新的内容在这个分支上开发完以后,再将新分支合并到主分支)
分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
-
查看分支
命令
git branch -v
可以查看分支,结果如下master c5b235a first commit
-
创建分支
命令
git branch 【分支名】
可以创建分支,git branch hot-fix
后git branch -v
结果如下hot-fix c5b235a first commit * master c5b235a first commit
-
切换分支
git后面还是master,说明当前还是master分支
使用
git checkout 【分支名】
可以切换分支 先git checkout hot-fix
然后git branch -v
,可以看到切换到了 hot-fix 分支* hot-fix c5b235a first commit master c5b235a first commit
-
修改分支
切换完分支以后,就可以修改工作区的内容(.git文件所在目录下)
修改完以后,需要
git add 【文件名】
git commit -m "【版本信息】" 【文件名】
我这边是
git add hello.txt
git commit -m "hot-fix first commit" hello.txt
然后
git reflog
, 可以看到指向了hot-fix分支a6f5eea (HEAD -> hot-fix) HEAD@{0}: commit: hot-fix first commit c5b235a (master) HEAD@{1}: checkout: moving from master to hot-fix c5b235a (master) HEAD@{2}: reset: moving to c5b235a 622bb3c HEAD@{3}: commit: second commit c5b235a (master) HEAD@{4}: commit (initial): first commit
-
合并分支
想把hot-fix 合并到master分支,需要先切换到master分支,然后再master分支下执行命令
git merge hot-fix
,就可以把hot-fix 合并到master分支下我这边是
git checkout master
切换完以后发现.git目录所在目录的hello.txt文件内容又变成了之前master的内容,然后git merge hot-fix
,此时发现分支合并了,hello.txt文件的内容变成了hot-fix的内容 -
产生冲突
合并分支时,两个分支在同一个文件的同一位置有两套完全不同的修改。Git无法替我们决定使用哪一个,必须人为决定新代码内容
git add hello.txt
后git commit -m "master test" hello.txt
git checkout hot-fix
后git add hello.txt
后git commit -m "master test" hello.txt
此时执行
git checkout master
切换master,然后合并git merge hot-fix
,会显示如下内容Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt Automatic merge Failed; fix conflicts and then commit the result.
此时执行命令
git status
,会提示两个文件都修改了,就需要手动合并代码On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: hello.txt no changes added to commit (use "git add" and/or "git commit -a")
-
解决冲突
出现冲突合并失败后,打开hello.txt文件,会再文件中标记出来,手动将文件中的内容合并,然后删除下面的合并提示```<<<<<<< HEAD``及其后面的内容都是合并提示,修改完以后保存,然后添加到暂存区,提交到本地库,(master|MERGING)状态下,提交时不用写文件名,实现手动合并
git add hello.txt
添加到暂存区git commit -m "merge test"
然后就手动合并成功了
Git团队协作机制
团队内协作
团队中甲本地库写好了基础代码以后,用push命令推送 到远程库
团队中乙拥有甲授予的权限,乙从远程库clone代码下来进行拓展修改,完成后push到远程库
甲再从远程库中用pull命令拉取远程库中修改过的代码,这样就实现了团队代码的同步
跨团队协作
B团队的
人通过fork命令作为分支,将A团队的远程库代码复制过来,作为自己的远程库
B团队从自己的远程库clone下来,然后再自己本地库进行修改,完成后push到自己的远程库
B团队完成后,需要pull request向A团队发送一个请求,然后A团队审核
A团队审核后,使用merge将代码合并过来,然后用拉取到本地库,实现跨团队协作
GitHub
GitHub官网https://github.com
创建远程库
-
1.登录GitHub后,点击网页右上角的+号,选择 new Repository(新建存储库)
-
3.公有库私有库的选项,因为是测试,默认用公有库就行
-
4.直接点最下方的Create repository,就创建好了一个远程库
-
5.此时会弹出一个页面,可以选择远程库的链接,有两种不同协议的链接 HTTPS 和 SSH
https://github.com/zqq2017123491/git-demo.git
代码推送 Push
基本语法git push 别名 分支
比如我把master分支推送,那就git push git-demo master
执行后会弹窗让我们登录,可以用浏览器的账号登录,登录后会提示我们认证
绑定后会提示Authentication Succeeded,认证成功,Git Bash会显示如下
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 8 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (24/24), 1.84 KiB | 471.00 KiB/s, done.
Total 24 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/zqq2017123491/git-demo.git
* [new branch] master -> master
然后就可以在github的库里看到自己推送的文件了
代码拉取 Pull
在github上可以直接点文件右上角的