Git学习记录——B站【GeekHour】一小时Git教程
本博客笔记均来自B站up主GeekHour的【GeekHour】一小时Git教程下方为传送门:
【GeekHour】一小时Git教程
急于查看命令直接看这部分,想对命令有更深一步理解见后文:
Git所有学习到的命令集合
/**Git版本查看、用户配置命令:**/
//查看git版本
git -v
// 配置git用户名(如果用户名有空格则需要用双引号括起来,反之不用)
git config --global user.name "xxx xxx"
// 配置git用户邮箱
git config --global user.email xxx@xxx.xxx
// 保存git用户名以及密码
git config --global credential.helper store
// 查看上述的配置信息
git config --global --list
/**Git本地仓库创建、拉取远程仓库命令:**/
// git仓库初始化,即在当前目录创建一个本地仓库
git init
// 在当前目录下创建一个目录名为my-git的本地仓库
git init my-git
// 通过拉取远程存在的仓库进行本地仓库初始化
git clone https://xxxxx
/**Git将文件添加到git仓库的命令**/
// 创建仓库
git init
// 查看仓库的状态
git status
// 添加filename文件到暂存区
git add filename
// 添加所有以.txt结尾的文件到暂存区
git add *.txt
// 将当前文件夹下的所有文件添加到暂存区
git add .
// 将添加到暂存区的filename文件重新拿回
git rm --cached filename
// 提交(只会提交保存在暂存区中的文件)
git commit -m "提交信息"
// 一次完成添加暂存和提交
git commit -a -m "提交信息"
// 查看git提交记录
git log
// 查看git提交记录(只显示每次提交的ID和提交信息)
git log --oneline
/**Git回退版本命令之git reset**/
// 查看暂存区文件
git ls-files
// 回退文件版本
git reset 版本号
// 回退到上一个版本
git reset HEAD^
// 回退文件到某一个版本,并保留工作区和暂存区的所有修改内容
git reset --soft 版本号
// 回退文件到某一个版本,并丢弃工作区和暂存区的所有修改内容
git reset --hard 版本号
// 回退文件到某一个版本,保留工作区的修改内容,丢弃暂存区的修改内容
git reset --mixed 版本号
/**Git命令之git diff查看差异**/
// git diff后不加参数表示默认比较工作区和暂存区之间的差异内容
// 会显示发生更改的文件以及更改的详细信息
git diff
// 比较工作区和版本库的差异
git diff HEAD
// 比较工作区和暂存区的差异
git diff --cached
// 查看不同版本文件之间的差异
git diff 提交版本号1 提交版本号2
// 查看当前版本文件和上一个版本的差异
git diff HEAD~ HEAD
// 查看当前版本文件和上number个版本的差异(number为具体数字如
// git diff HEAD2 HEAD)表示查看当前版本文件和上2个版本的差异
git diff HEAD~number HEAD
// 查看filename文件当前版本和上number个版本的差异
git diff HEAD~number HEAD filename
// 查看文件在不同分支之间的差异
// 查看不同分支之间的差异
git diff 分支名1 分支名2
//**Git删除文件命令**/
// 把文件从工作区和暂存区同时删除
git rm <file>
// 把文件从暂存区删除,但保留在当前工作区的<file>
git rm --cached <file>
// 递归删除某个目录下的所有子目录和文件
git rm -r *
//删除后不要忘记提交
/**Git远程仓库相关命令**/
// 添加远程仓库
Step 1
git remote add <远程仓库别名> <远程仓库地址>
Step 2
git push -u <远程仓库名> <分支名>
// 查看远程仓库
git remote -v
// 生成SSH公钥
// 私钥文件:id_rsa 公钥文件:id_rsa.pub
ssh-keygen -t -b 4096
// 推送更新内容到远程仓库
git push <remote> <branch>
// 拉取远程仓库内容到本地仓库
git pull <远程仓库名> <远程分支名>:<本地分支名>(远程分支名与本地分支名相同可以省略冒号后的内容)
// 关联新的远程仓库地址
git remote add 仓库名 仓库地址
//**Git分支命令**//
// 显示当前仓库的分支
git branch
// 创建仓库的分支
git branch 新要创建分支名
// 切换仓库的分支
git switch 分支名
// 合并分支到当前分支
git merge 要被合并的分支名
// 查看分支图
git log --graph --oneline --decorate --all
// 删除某已经被合并的分支
git branch -d 要被删除的分支名
// 强制删除某未被合并的分支
git branch -D 要被删除的分支名
//**分支合并命令**//
// 终止此次分支合并
git merge --abort
// 可用于任何分支处的合并命令
git rebase 要合并的分支名(适合此分支下仅你一人在开发且希望提交历史更加清晰明了,分支图单一、清晰,但会影响多人在此分支下的操作)
git merge 要被合并的分支名(适合只合并俩分支,不关心提交历史,但分支图复杂,不清晰)
// 恢复某一分支
git checkout -b 要恢复的分支名 提交ID
//查看提交日志及提交ID
git log --online --graph --decorate --all
// 设置某个命令的别名
alias 别名="原命令"
接下里为对上述命令的详细记录:
Git版本查看、用户配置命令:
//查看git版本
git -v
// 配置git用户名(如果用户名有空格则需要用双引号括起来,反之不用)
git config --global user.name "xxx xxx"
// 配置git用户邮箱
git config --global user.email xxx@xxx.xxx
// 保存git用户名以及密码
git config --global credential.helper store
// 查看上述的配置信息
git config --global --list
Git本地仓库创建、拉取远程仓库命令:
// git仓库初始化,即在当前目录创建一个本地仓库
git init
// 在当前目录下创建一个目录名为my-git的本地仓库
git init my-git
// 通过拉取远程存在的仓库进行本地仓库初始化
git clone https://xxxxx
Git的工作区域和文件状态
工作区域:
- 工作区(Working Directory)
在资源管理器里面能够看到的文件夹便是工作区
- 暂存区(Staging Area/Index)
一种临时存储区域,用于保存即将提交到Git仓库的修改内容
- 本地仓库(Local Repository)
即使用git init或者git clone方式创建的git仓库,它包含了完整的的项目历史和元数据,用于存储代码、版本信息的主要区域
文件状态:
未跟踪:新创建的文件,还未被git进行管理
未修改:已被git管理的文件,但文件内容没有发生变化
已暂存:已经被修改的文件,但是还没推送到暂存区
已提交:已经被修改的文件,且被推送到暂存区
Git将文件添加到git仓库的命令:
// 创建仓库
git init
// 查看仓库的状态
git status
// 添加filename文件到暂存区
git add filename
// 添加所有以.txt结尾的文件到暂存区
git add *.txt
// 将当前文件夹下的所有文件添加到暂存区
git add .
// 将添加到暂存区的filename文件重新拿回
git rm --cached filename
// 提交(只会提交保存在暂存区中的文件)
git commit -m "提交信息"
// 一次完成添加暂存和提交
git commit -a -m "提交信息"
// 查看git提交记录
git log
// 查看git提交记录(只显示每次提交的ID和提交信息)
git log --oneline
Git回退版本命令之git reset:
// 查看暂存区文件
git ls-files
// 回退文件版本
git reset 版本号
// 回退到上一个版本
git reset HEAD^
// 回退文件到某一个版本,并保留工作区和暂存区的所有修改内容
git reset --soft 版本号
// 回退文件到某一个版本,并丢弃工作区和暂存区的所有修改内容
git reset --hard 版本号
// 回退文件到某一个版本,保留工作区的修改内容,丢弃暂存区的修改内容
git reset --mixed 版本号
Git命令之git diff查看差异:
可以查看工作区、暂存区、本地仓库之间的差异
可以查看不同版本文件之间的差异
可以查看文件在不同分支之间的差异
查看工作区、暂存区、本地仓库之间的差异——
1.查看工作区和暂存区之间的差异
// git diff后不加参数表示默认比较工作区和暂存区之间的差异内容
// 会显示发生更改的文件以及更改的详细信息
git diff
git diff查看工作区和暂存区之间的差异内容举例:
2.比较工作区和版本库的差异
// 比较工作区和版本库的差异
git diff HEAD
比较工作区和版本库的差异举例:
3.比较工作区和暂存区的差异
// 比较工作区和暂存区的差异
git diff --cached
比较工作区和暂存区的差异举例:
查看不同版本文件之间的差异——
// 查看不同版本文件之间的差异
git diff 提交版本号1 提交版本号2
// 查看当前版本文件和上一个版本的差异
git diff HEAD~ HEAD
// 查看当前版本文件和上number个版本的差异(number为具体数字如
// git diff HEAD2 HEAD)表示查看当前版本文件和上2个版本的差异
git diff HEAD~number HEAD
// 查看filename文件当前版本和上number个版本的差异
git diff HEAD~number HEAD filename
查看文件在不同分支之间的差异——
// 查看不同分支之间的差异
git diff 分支名1 分支名2
Git删除文件命令:
// 把文件从工作区和暂存区同时删除
git rm <file>
// 把文件从暂存区删除,但保留在当前工作区的<file>
git rm --cached <file>
// 递归删除某个目录下的所有子目录和文件
git rm -r *
//删除后不要忘记提交
Git忽略部分文件:
需要在.gitignore文件中进行明示所需要忽略的文件如:
.gitignore文件的匹配规则
- 空行或者以#开头的行会被git忽略。一般空行用于可读性的分隔,#一般用作注释
- 使用标准的Blob模式匹配,例如:
星号_通配任意个字符
问号?匹配单个字符
中括号【]表示匹配列表中的单个字符,比如:[abc]表示 a/b/c_ - 两个星号**表示匹配任意的中间目录
- 中括号可以使用短中线连接,比如:
[0-9]表示任意一位数字,[a-z]表示任意一位小写字母
举例说明:
远程仓库:
// 添加远程仓库
Step 1
git remote add <远程仓库别名> <远程仓库地址>
Step 2
git push -u <远程仓库名> <分支名>
// 查看远程仓库
git remote -v
// 生成SSH公钥
// 私钥文件:id_rsa 公钥文件:id_rsa.pub
ssh-keygen -t -b 4096
// windows下ssh密钥配置
https://www.jianshu.com/p/9317a927e844
// 推送更新内容到远程仓库
git push <remote> <branch>
// 拉取远程仓库内容到本地仓库
git pull <远程仓库名> <远程分支名>:<本地分支名>(远程分支名与本地分支名相同可以省略冒号后的内容)
// 关联新的远程仓库地址
git remote add 仓库名 仓库地址
Vscode中的Git文件状态
Git分支
// 显示当前仓库的分支
git branch
// 创建仓库的分支
git branch 新要创建分支名
// 切换仓库的分支
git switch 分支名
// 合并分支到当前分支
git merge 要被合并的分支名
// 查看分支图
git log --graph --oneline --decorate --all
// 删除某已经被合并的分支
git branch -d 要被删除的分支名
// 强制删除某未被合并的分支
git branch -D 要被删除的分支名
分支冲突解决:
手动进行修改文件的修改内容,然后重新提交
// 终止此次分支合并
git merge --abort
// 可用于任何分支处的合并命令
git rebase 要合并的分支名(适合此分支下仅你一人在开发且希望提交历史更加清晰明了,分支图单一、清晰,但会影响多人在此分支下的操作)
git merge 要被合并的分支名(适合只合并俩分支,不关心提交历史,但分支图复杂,不清晰)
// 恢复某一分支
git checkout -b 要恢复的分支名 提交ID
//查看提交日志及提交ID
git log --online --graph --decorate --all
// 设置某个命令的别名
alias 别名="原命令"
分支管理和工作流模型
Git-flow工作流:
主线分支:
只接受来自hotfix和release分支的合并请求,不允许直接push修改
主线分支main版本号规则:
主版本(Major Version) ion):主要的功能变化或重大更新;
次版本 (Minor Version):一些新的功能,改进和更新,通常不会影响现有功能;
修订版本:(Patch Version): 一些小的bug修复,安全漏洞补丁等。通常不会更改现有功能和接口。
线上版本bug热修复分支:
用于解决线上问题,修复完成后合并回main分支
线上版本bug热修复分支命名规则:
hotfix-#issueid-desc
开发分支develo:
从main分支中分离出来,包含了项目的最新开发版本的代码,用于开发和测试
功能分支:
从开发分支中分离出来,包含了项目某个新功能的代码,用于开发新的功能,待功能分支代码稳定后会被合并回开发分支
预发布分支release:
从开发分支中分离出来,当预发布分支代码稳定后会合并到主分支和开发分支中
Github-flow工作流
分支命名以及管理规范: