前言:
注:本博客仅用于记录本人学习过程中对git的理解,仅供学习参考,如有异议请自行查资料求证
安装
使用git之前必须完成git的安装,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行
基本概念
git基础命令
定义:git 指令使用前准备先使用git命令配置用户的名字和用户的邮箱
//git指令配置用户名
git config --global user.name "userName"
// git 指令配置用户的邮箱地址
git config --global user.email "email.com"
注:Local 表示配置到本地,此处做出省略【本地配置,只对本地仓库有效 】,--global : 全局配置,所有仓库生效,--system :系统配置,对所有用户生效,这两个指令只需要执行一次。
git 指令保存用户名与密码
git config --global credential.helper store
查看git的配置信息
git config --global --list
新建版本库
定义:新建版本库的目的是更好的对本地的仓库进行管理,git 仓库分为两种,一种是本地仓库,一种是远程仓库
初始化一个本地仓库
git init ----------------> 在自己电脑的本地创建一个仓库
注:使用git init 指令进入对应的目录,可以将本地的文件初始化为一个本地仓库
创建本地仓库的步骤
1.0 mkdir learn-git // 创建一个名字为learn-git的文件夹
2.0 cd learn-git // 进入刚刚创建的文件夹
3.0 git init // 初始化文件夹为本地仓库
实操演示:
创建远程仓库
远程克隆一个仓库
git clone "远程仓库的地址"
注:远程仓库克隆不做实际演示
1.0 工作区域和文件状态
git 的工作区与文件状态
git 的工作区:工作区可以理解为我们本地的目录,也就是我们电脑可以看到的目录
git 的暂存区:可以理解为临时存储文件的地方【或者文件的中转站】
git 的本地仓库:可以理解为git的版本库里面有一个.git的目录
注:从以上的这张图可以了解到暂存区就像是一辆转运卡车用来将工作区中的文件转运提交到本地仓库中,版本控制系统中保存文件的方式就称之为提交。
2.0 git中文件的工作状态
各个文件不同状态讲解
3.0 如何将文件添加到仓库
git init 创建仓库
git status 查看仓库的状态
git add 将仓库文件添加到暂存区
git commit 将暂存区中的文件添加到本地仓库
实操演示
查看文件状态指令
git status // 显示文件的状态
注:文件显示为红色表示文件还未被提交到暂存区
git add . // 将当前所有文件添加到暂存区
git add fileNamw // 将指定文件添加到暂存区
-m 参数的后面跟着的是文件的提交信息
git commit -m "这是提交文件的信息" // 将文件提交到本地仓库
实操演示
注:git 文件的提交,将文件提交到本地的仓库,在将文件提交到本地仓库的同时需要使用-m指令将文件提交的信息同时提交大本地仓库中
注 :git commit 只会提交暂存区中的文件而不会提交本地中的文件,在使用git commit 这个命令的时候需要加上 -m 来显示提交的信息。
4.0 通配符
通配符的定义
通配符是用于在文件系统中匹配文件名或文本模式的特殊字符。它们在很多操作系统、命令行工具和编程语言中都有应用
通配符的使用
【星号】: * 表示匹配 “零” 个或者 “多个” 字符,如:*.txt 表示匹配以txt结尾的所有文件
【问号】: ? 表示匹配单个字符,如:file?.txt 表示匹配 file1.txt 或者 file2.txt等文件
【方括号】: [ ] 表示匹配方括号内列出的任何一个字符。例如,file1[123].txt
可以匹配 file1.txt、file2.txt 或 file3.txt
【大括号】:{ } 用于创建模式组合如 {*.jpg, *.png}
可以匹配所有以 .jpg
或 .png
结尾的文 件名。
5.0 git 中通配符的使用
使用git add *.txt 将所有以txt结尾的文件添加到暂存区中
注:git add . 可以将当前文件夹中的所有文件添加到暂存区中
在 git 中可以使用git log 指令查看提交的信息
git log --oneline --graph --decorate all 指令:查看文件的提交树
git 仓库中指令总结
6.0 git reset 指令
定义:git reset命令有三种不同的用法,后面可以跟着不同的参数:分别代表的含义是软的,硬的,混合的。
回退版本的三种模式
git reset --soft 表示的是回退到某一个版本,并且保存工作区和暂存区的修改
git reset --hard 表示的是回退到之前的某一个版本,并且丢弃掉工作区和暂存区的修改
git reset --mixed 回退到某一个版本,只保留工作区的修改内容,丢弃暂存区的修改内容
实际操作
...随后补充
git diff 查看工作区,暂存区,本地仓库之间的差异
git diff后面什么文件都不加的话显示的是工作区和暂存区的内容
比较工作区和暂存区之间的差异 git diff
比较工作区和版本库之间的差异 git diff HEAD
比较暂存区和版本库之间的差异 git diff --cached
git diff master HEAD^ ----------> 对比本次提交和上次提交的差别
git diff master HEAD~3 ----------->对比本次提交和前面3次提交的差别
提交文件到本地仓库
git commit -m "commit4"
7.0 git 中HEAD的含义
head含义表示的是指向当前最新的提交节点
git diff HEAD~ HEAD -------> 比较当前版本和上一个版本的区别
git diff HEAD^ HEAD -------> 也是比较当前版本和上一个版本的区别
git diff HEAD~3 HEAD -------> 表示比较当前版本和前面三个版本的区别
git diff HEAD~3 HEAD file3.txt -------> 查看file3的差异内容
git diff 还可以查看两个分支之间的差异【这个时候直接加上两个分支的名字即可】
8.0 如何从版本库中删除文件
定义:如何删除本地仓库中的内容?使用 rm 指令删除指令中的内容
rm flie1.txt // 删除文件
查看当前目录下的文件
ls 查看当前目录下的文件
git add file.txt 表示将这个文件从暂存区中删除掉
如何使用git rm 这个命令删除我们不需要的版本库,git rm file2.txt 将程序从咱们的版本库中删除,同时暂存区中也删除
9.0 gitignore的作用
忽视gitignore文件,被该文件引用的文件不提交
gitignore 的作用忽视省略不提交相关文件
...后续补充
推送到远程仓库
以下是常见的远程代码托管平台
github 代码托管平台
github注册指南:windows安装git(全网最详细,保姆教程)-CSDN博客
gitee 代码托管平台
gitee 注册指南 :10、Git之国内项目托管平台(Gitee码云) - Javaer1995 - 博客园
如何注册 github
github注册指南:注册Github账号详细教程【超详细篇 适合新手入门】_github注册-CSDN博客
1.0 创建github仓库
注:由于github是一个外国的网站访问的时候需要挂梯子
第一步:登录github创建自己的仓库
第二步:创建远程仓库
第三步:将本地仓库和远程仓库关联起来
2.0 克隆远程仓库
注:使用git clone 指令克隆远程仓库
git clone “远程仓库的地址”
访问远程仓库有两种方式一种是https的方式,一种是ssh方式
https 的方式需要在拉取远程仓库的时候提供自己的用户名和密码
ssh 的方式不需要在拉取的时候提供自己的用户名和密码,但是需要配置ssh秘钥
3.0 配置ssh秘钥
1.0 cd ~ 进入用户的根目录
2.0 cd .ssh 进入用户的ssh目录
3.0 ssh-keygen -t rsa -b 4096 生成咱们的ssh秘钥
远程仓库生成秘钥之后需要进入公钥将里面的钥匙放进远程仓库
注:当指定一个新文件名的时候需要进行这一步操作
tail -5 config
将以下的5行内容添加到github里面,这个文件的意思是当我们访问github.com的时候指定使用ssh下的test这个秘钥
注:当前面的步骤指定新的文件名的时候需要使用这个步骤,否则不需要进行这个步骤
4.0 克隆远程数据库
定义:使用克隆命令将远程创建的仓库克隆到本地
5.0 git 简介
git 是一种分布式的版本控制系统,本地仓库和远程仓库是2个仓库它们之间是相互独立的,本地仓库的修改不会影响到远程的仓库,远程仓库的修改也不会影响到本地的仓库
这个时候我们需要一种机制来同步远程仓库和本地仓库的修改内容,让本地仓库和远程仓库的状态保持一致
git push 将本地仓库的内容推送到远程仓库
使用我们的推送命令将本地仓库的内容推送到远程仓库成功,查看远程仓库进行验证
本地已经有一个仓库的情况下如何将程序放到远程仓库?
在github上新创建一个仓库回到命令行将本地的仓库推送到远程
使用 git remote add origin 远程仓库的地址
执行完成之后使用 git remote -v 查看我们当前仓库对应的远程仓库别名和地址
执行完以上两个命令之后本地仓库就已经被推送到我们的远程仓库了,这个origin表示的是远程仓库的地址名。
git branch -M main 这一行代码的意思是指定分支的名称为main
(注:如果本地仓库和远程仓库的别名不同需要将本地仓库的地址切换到远程仓库)
git push -u origin main 这一行代码的含义是把本地的main分支和远程的origin仓库的main分支关联起来,实际上补全的写法是git push -u origin main:main。
如果我们在远程仓库修改了部分的内容,那么我们需要将远程仓库的内容拉取到本地
github上的文件是可以直接编辑的
【演示----> 在github上的修改模拟远程仓库的修改和拉取,通常远程仓库的内容是程序员在本地修改之后推送到远程仓库的,我们需要将远程仓库上修改的内容推送到本地】
这个时候远程仓库已经有了一个新的文件,但是我们本地仓库还有一个文件的内容没有被获取,这个时候我们需要使用pull 命令将远程仓库的内容拉取到本地仓库。
git pull命令详解
git pull <远程仓库名> <远程分支名>:<本地分支名>
可以直接使用 git pull 进行拉取省略远程仓库名,远程分支名【这个时候默认拉取的就是远程仓库中名字为origin的分支】。
如果不省略的话拉取的就是指定仓库的指定分支名。
使用 ls 命令查看咱们本地的文件仓库目录显示远程目录中的内容已经同步到本地仓库了
注:在我们从远程仓库拉取代码的同时,本地本地仓库中的内容会自动的和远程仓库中的内容做比对,如果本地仓库的内容和远程仓库的内容有冲突是不会进行合并操作的。
从远程仓库获取内容还可以使用fetch命令,区别在于fetch命令只是获取远程仓库的修改,但是并不会自动合并到本地仓库中,需要我们手动的将文件合并到本地仓库中
总结:
国内代码托管平台
如何使用国内的平台托管我们的仓库,gitee 和 gitLab
1.0 gitLab的使用
GitLab代码管理_源代码管理工具_代码仓库_代码托管平台_代码安全审计-极狐GitLab
私有化部署表示的是我们可以在自己的服务器上部署一个自己的代码托管服务
部署的过程可以参考gitLab的官方文档
..................
如何使用GUI工具和IDE如何使用git
了解市面上常见的GUI工具【后续补充】
2.0 如何在VSCode中使用git
如何在VSCode中使用git------重要-----
3.0 git 中的分支介绍
分支的使用场景适用于协同开发的场景
git 中分支的基本操作
mkdir branch-demo 创建一个branch-demo文件夹
cd branch-demo 进入branch-demo文件夹
git init 初始化本地仓库
分支的命名方式
git 中分支的基本操作,使用分支名加序号的方式来命名文件,分支名加冒号加序号的方式来编写提交记录
在此次的git文件命令中使用
echo mian1 > main1.txt 创建一个文件
git add . 将文件添加到暂存区
git commit -m "描述" 将文件添加到本地仓库
echo mian2 > main2.txt 创建一个文件
git add . 将文件添加到暂存区
git commit -m "描述" 将文件添加到本地仓库
echo mian3 > main3.txt 创建一个文件
git add . 将文件添加到暂存区
git commit -m "描述" 将文件添加到本地仓库
如何创建一个新的分支 git branch "branch-name" 创建一个新的分支
使用git branch “branch-name” ----------------创建一个新的分支
git branch dev
【注:使用git checkout切换分支的时候可能会存在一些潜在的问题】
git checkout 命令不仅仅可以用来切换分支还可以用来修改之前的一些相关文件,为了解决这个问题git官方还为我们提供了一个解决问题的方案,就是使用swtich指令切换分支
git switch 切换分支的名称
如何将代码分钟中的功能合并到主线,可以使用git merge功能将分支中的代码合并到主线
git merge dev 【注:merge 后面的分支名称是将要被合并的分支,当前所在的分支是合并后的目标分支】
如果我们要把dev 分支合并到main分支的话就需要首先切换到main分支中,然后执行git merge dev命令
将分支中的内容合并到主干分支
在命令行中可以通过git log 查看我们的分支图
git log --graph --oneline
查看git的提交树
git log --graph --oneline --decorate --all
如何使用分支图查看分支的提交过程
4.0 删除分支
git branch -b “branchName” 表示的含义是删除已经合并的分支
git branch -D “branchName” 表示的含义是删除还没有合并的分支
5.0 分支合并冲突
git commit -a -m "feat:1" 在提交命令的后面加上 -a 这个参数就可以一次性完成暂存和提交的任务
冲突指的是在分支中修改了文件的内容,同时在主分支中也修改了文件的内容,两个文件的内容修改都不一样,如果对分支进行合并这个时候就会出现文件冲突,此时我们需要手动修改文件的内容,得到我们想要的效果,对文件进行重新的提交。
【以上是在合并时解决冲突的过程】
6.0 不同分支合并
在git 中想要将不同分支的内容整合到一起可以使用rebase 中文翻译过来就是变基的意思
使用Merge合并的效果
rebase 和main分支的不同
使用rebase的话,可以在任意的分支上执行,可以在main分支上执行rebase操作,也可以在子分支上执行。
如果在dev分支上执行rebase操作结果就是dev分支上的两次提交记录就会变基到main分支上
如果是在main分支上执行提交记录,那么main分支上的提交记录就会变基到dev分支上
7.0 HEAD 的作用
在分支中,每一个分支的提交记录都会有一个最新的指针指向当前最新的提交记录,这个指针的名称称之为HEAD
实际演示
如何使用指令删除已经提交的分支:git checkout -b branchName branch_id
由于命令太长可以使用alias命令将文件定义成一个简短的命令
alias graph = "git log --oneline --graph --decorate --all"
linux 复制文件夹的命令
cp -rf file-name option-name
知识回顾,第一个rebase命令需要切换到面分支然后变基到main分支中进行合并
如果使用rebase就想是嫁接移植的方式进行管理
切换目录修改文件
-----将当前的项目文件嫁接到另外的一个分支文件中-----
Rebase 和 merge 的区别,该如何区分使用
避免在一个共享分支上进行rebase操作【在公共的分支上不要执行rebase操作】
git rebase 一定要避免在共享分支中使用
git 分支管理中的工作流模型
主线分支中的代码一般是直接发布到生产环节的,主版本号主要表示的是功能的变化和更新
gitHub Flow模型:主分支上的代码是直接部署到生产环境中的,团队的成员可以对代码进行review评审
注:以上内容均基于本人理解撰写,仅供学习参考