git
git 命令都以git开头,是为了与linux命令进行区分
初始化配置
git -v 查看版本
git config --global user.name "yun OS" 设置用户名(用户名中间有空格,就要加双引号)
git config --global user.email javayun@qq.com 设置用户邮箱
git config --global init.defaultBranch master 设置版本库默认分支
git config --global --list 查看配置信息
–Local:本地配置,只对本地仓库有效
–global:全局配置,所有仓库生效
–system:系统配置,对所有用户生效
配置文件保存在 ./gitconfig
里面,可以使用编辑器手动修改
[user]
name = yun OS
email = javayun@qq.com
[init]
defaultBranch = master
创建git仓库
方法一:
mkdir myproject 创建一个目录
cd myproject 进入这个目录
git init 创建仓库
方法二:
git init myproject 创建仓库
可以进入目录再执行git init命令,也可以执行该命令时给定参数
创建一个Git远程仓库,或者说是克隆一个远程仓库,远程仓库指gitee,gitlab等
git clone https://**************.git
Git的工作区域和文件状态
-
工作区:工作区就是你克隆项目到本地后,项目所在的文件夹目录。
-
暂存区:用于存储工作区中添加上来的变更(新增、修改、删除)的文件的地方。操作时,使用git add .会将本地所有新增、变更、删除过的文件的情况存入暂存区中。
-
本地仓库:用于存储本地工作区和暂存区提交上来的变更(新增、修改、删除)过的文件的地方。操作时,使用git commit –m “本次操作描述”可以将添加到暂存区的修改的文件提交到本地仓库中。
文件状态
未跟踪(Untrack):新创建的文件,还没有被git管理
未修改(Unmodified):已经被git管理,但文件的内容没有变化,没有修改过
已修改(Modified):已经修改了的文件,但是没有添加到暂存区
已暂存(Staged):文件修改之后,已经添加到了暂存区里面
添加和提交文件
git add 文件名 将文件添加到暂存区
git restore --staged 文件名 取消添加到暂存区,放回工作区
git commit -m "提交的描述信息" 将文件提交到仓库
git commit -a -m "提交的描述信息" 加-a选项,就实现了提交暂存区,提交仓库,一次搞定
git commit -am "提交的描述信息" 简写
-m
指定提交信息,如果不加此选项,会进入一个交互式的输入界面(vi),在第一行编辑后保存退出(Esc :wq)
git只会提交暂存区里面的文件,不会提交工作区里面的文件
支持使用通配符 * . 点表示当前目录(全部)
git log 查看提交
git log --oneline 查看简洁的提交记录(只显示提交ID,以及自定义的提交信息)
git reset 回退版本
工作区 | 暂存区 | 本地仓库 | |
---|---|---|---|
git reset --soft | ✔ | ✔ | |
git reset --hard | ❌ | ❌ | |
git reset --mixed | ✔ | ❌ |
git reset --soft
回退到某一个版本,并且保留工作区和暂存区的所有内容
git reset --hard
回退到某一个版本,并且丢弃工作区和暂存区的所有内容
git reset --mixed
回退到某一个版本,并且只保留工作区的所有内容丢弃暂存区的所有内容 (默认参数)
git log --oneline 先查询一下,得到版本ID
git reset --soft 版本ID 通过版本ID回退到指定的版本
git ls-files 查看暂存区的内容
git status 查看仓库的状态
git reset --hard HEAD^ 可以使用 HEAD^ 回退到上一个版本
git reset HEAD^ 不添加参数就是使用 默认参数 mixed 提交
git reflog 查看所有的操作记录
分支介绍
适合团队协作,比如多个开发人员可以在自己的分支上进行开发工作,最后再合并到主分支中
git branch 查看当前仓库的所有分支
git branch dev 创建一个名为dev的新分支
git switch dev 切换到dev分支
git checkout dev 切换到dev分支
git checkout
命令也可以用来恢复文件,如果需要恢复的文件和分支名相同,就会给你带来意料之外的结果
git switch
在2.23版本开始新添加的,专门用来切换分支的命令
git branch
dev
* master 当前在master分支
如果要将dev分支合并到master分支,需要先切换到master分支
git merge dev 将dev分支合并到master分支
git branch -d dev 分支合并完,原分支可以删除
git branch -D dev 如果分支没有被合并,需要使用 -D 来删除
git log --graph --oneline --decorate --all 查看分支图
回退和rebase
git rebase dev 如果当前在master分支,执行这条命令,就会将dev合并到master分支“的后面”
merge和rebase的区别
merge
优点:不会破环原分支的提交历史,方便回溯和查看
缺点:会产生额外的提交节点,分支图比较复杂
rebase
优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
缺点:会改变提交历史,改变了当前分支branch out的节点。避免在共享分支使用
合并冲突
两个分支中,有同名的文件,内容不一样,就会冲突
git merge dev 把dev分支的内容合并到master分支
[root@git myproject]# git branch # 查看分支
dev
* master
[root@git myproject]# echo "1111"> demo.txt # 新建文件
[root@git myproject]# git add demo.txt # 将文件添加到暂存区
[root@git myproject]# git commit -m "1111" # 将文件提交到仓库
[master 10cfa45] 1111
1 file changed, 1 insertion(+), 2 deletions(-)
[root@git myproject]# git switch dev # 切换到dev分支
切换到分支 'dev'
[root@git myproject]# echo "2222"> demo.txt # 修改文件
[root@git myproject]# git add demo.txt # 将文件添加到暂存区
[root@git myproject]# git commit -m "2222" # 将文件提交到仓库
[dev 75b9592] 2222
1 file changed, 1 insertion(+), 2 deletions(-)
[root@git myproject]# git switch master # 切换到master分支
切换到分支 'master'
[root@git myproject]# git merge dev # 将dev分支合并到master分支
自动合并 demo.txt
冲突(内容):合并冲突于 demo.txt
自动合并失败,修正冲突然后提交修正的结果。
[root@git myproject]# cat demo.txt
<<<<<<< HEAD
1111
=======
2222
>>>>>>> dev
[root@git myproject]# vim demo.txt # 修改冲突文件
[root@git myproject]# cat demo.txt
1111
2222
[root@git myproject]# git add demo.txt # 将文件添加到暂存区
[root@git myproject]# git commit -m "3333" # 将文件提交到仓库
[master ebeeb00] 3333
[root@git myproject]# git log --graph --oneline --decorate --all # 查看分支图
* ebeeb00 (HEAD -> master) 3333
|\
| * 75b9592 (dev) 2222
* | 10cfa45 1111
|/
* 0038608 demo文件在dev第一次提交
* ea8094c demo文件在master第一次提交
git diff 该命令会把冲突的部分显示出来
git branch -d feat 可以删除没有用的分支
git diff 查看文件差异
- 查看文件在工作区、暂存区、本地仓库之间的差异
- 查看文件在不同版本之间的差异
- 查看文件在两个分支之间的差异
git diff 比较工作区和暂存区的文件内容,会显示发生更改的文件以及更改的详细信息,不输出则表示工作区和暂存区是一样的
git diff HEAD 比较暂存区和仓库的内容
git diff --cached 比较工作区和仓库的内容
git log --oneline 查询版本ID
git diff f8ee8ab b728d37 比较两个版本之间的不同
git diff f8ee8ab HEAD HEAD 表示最新版本
git diff HEAD~ HEAD HEAD~ 表示上一个版本
git diff HEAD^ HEAD HEAD^ 表示上一个版本
git diff HEAD~2 HEAD HEAD~2 表示 HEAD 之前的两个版本
git diff HEAD~ HEAD fiel.txt 只显示file文件的差异内容
从版本库中删除文件 git rm
rm -rf file1.txt 先将文件file1.txt删除
git add file1.txt 将删除的文件再执行一下git add,告诉暂存区,这样暂存区就删除了
git rm file1.txt 该命令可以将工作区,暂存区的文件一次性删除
git rm --cached file1.txt 把文件从暂存区中删除,但保留在工作区
git rm -r * 递归删除某个目录下的所有子目录和文件
git commit -m "删除 file1.txt 文件" 执行一次提交,就可以将版本库的文件也删除
.gitignore忽略文件
把一些不重要的文件忽略掉,使它不提交到版本库里面
echo 'demo.log' > .gitignore 忽略demo.log日志文件
vim .gitignore
*.log 忽略所有的日志文件
这个文件是,从上到下逐行匹配,每一行表示一个忽略模式
关联本地仓库和远程仓库
远程仓库指gitee,gitlab等
ssh-keygen -t rsa -b 4096 -t 表示生成什么协议的密钥,-b 表示生成密钥的大小
创建一个Git远程仓库,或者说是克隆一个远程仓库,远程仓库指gitee,gitlab等
git clone https://**************.git
git remote -v 可以查看当前仓库对应的远程仓库的别名和地址
git remote add origin git@gitee.com:chen-fengyun/get-test.git
git push -u origin "master"
git push 把本地仓库的修改推送到远程仓库
git pull 把远程仓库同步到本地仓库
规范和模型
版本号规则
主版本 (Major Version): 主要的功能变化或重大更新;
次版本 (Minor Version): 一些新的功能、改进和更新, 通常不会影响现有功能;
修订版本 (Patch Version): 的bug 修复, 安全漏洞补丁等。通常不会更改现有功能和接口。
git分支的命名规则
主分支: 主分支是代码库的稳定版本,通常用于发布生产环境的代码。主分支的命名可以是main或master。
开发分支:开发分支用于日常的功能开发,通常是由主分支派生而来。开发分支的命名可以是develop或dev。
功能分支:功能分支用于开发某种特定功能,从开发分支中分出,开发完成后需再并入开发分支。
功能分支的命名可以采用feature-xxx 的形式,其中xxx是功能模块的名称。
修复分支:修复分支用于修复已发布版本中的bug,从主分支或开发分支中分出。
修复分支的命名可以采用hotfix-xxx的形式,其中xxx是bug的编号或描述。