⭐️本篇blog 是b站 【【GeekHour】一小时Git教程】的学习记录笔记,感觉真的很不错~ 为了继续后一步的学习,我也记录一下~ 大家也可以去看看这个视频,很详细!
在这之前你得先 安装一下Git然后才能开始使用它~
首先明确一下什么是Git
Git 是一个流行的软件开发版本控制系统。它允许在存储库(repo)中管理代码的不同版本~ 提供远程仓库和本地仓库 是项目合作管理 记录学习代码等的必备工具!
Git中本地仓库 和 远程仓库 两者也可以相互关联 下面就分别介绍本地仓库的管理命令和远程仓库的管理命令
本blog主要是记录一些常用的Git命令~ 学习完这些基本就够用啦~
建议大家需要边操作边学习 熟练起来 Git真的是程序员必备的一个工具的存在!
对于后期的话,大家熟练了Git的原理之后,可以使用图形化的工具,比如VScode GitKraken等等等
b站 GitKraken教学
☘️首先在学习之前,建议美化一下git-bash终端~更好看 ~ 美化(当然不美化也没关系哈哈哈哈)
对于powershell 的美化安利下面几个blog 真的亲测有效果~
blog1
scoop scoop工具
blog2
你可以在任意的位置,比如D盘 learn-git目录下,右键点击 然后Git Bash here
//注意用户名如果有空格要用双引号括起来 没有的话就不用
//这里主要是进行配置一下用户的基本信息 不配置也不影响使用
git config --global user.name "xi_guang"
git config --global user.email xx@qq.com
git config --global credential.helper store//用来保存用户名和密码 这样就不用每次都输入了
git config --global --list//查看配置的信息
配置完了大概就长这样
//创建本地仓库
git init //在当前目录创建仓库
git init my-repo//创建一个名为 my-repo的仓库
//也可以从远程服务器上克隆一个已经存在的仓库 后面会说
ls -a //显示所有文件 .git是隐藏目录 所以要用-a来显示所有目录
ls -altr//源自于下文扩展中的部分,git仓库具体的文件和目录
创建本地仓库
远程克隆仓库
//ls命令 ls -l //以长格式显示当前目录中的文件和目录 ls -a // 显示当前目录中的所有文件和目录,包括隐藏文件 ls -lh //以人类可读的方式显示当前目录中的文件和目录大小 ls -t //按照修改时间排序显示当前目录中的文件和目录 ls -R //递归显示当前目录中的所有文件和子目录 ls -l /etc/passwd //显示/etc/passwd文件的详细信息 ================== // 关于删除命令 rm -rf 要删除的文件名或目录//删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为 //删除文件名 test.txt: rm -rf test.txt //删除目录 test,不管该目录下是否有子目录或文件,都直接删除: rm -rf test/ ============== cp -rf repo repo-soft//把repo这个文件复制 重命名为 repo-soft //echo 命令 echo "hello" >hello.txt //创建一个内容为hello的文件hello.txt //如果用一个>表示创建一个文件 覆盖当前的空白内容 如果该文件之前已经有了 就会覆盖 echo "hellohello" >>hello.txt//文件hello.txt 追加内容hellohello echo "helo" >tmp/hello.txt//在tmp文件夹中创建一个hello.txt的文件
工作区 Working Directory
git add ↓
暂存区 Staging Area/Index
git commit ↓
本地仓库 Local Repository
git status//查看仓库的状态
=====================
git add file.txt//把file.txt添加到暂存区
git add *.txt //把所有工作区的文件通配符后缀为.txt的文件都提交到暂存区里
git add .//把当前文件的所有文件都添加到暂存区
git rm --cached file.txt// 把file从暂存区重新回收到工作区
======================
git commit//只会提交暂存区中的文件而不会提交工作区中的其他文件
//注意 git commit 需要用-m来指定提交时的信息 否则会进入vim界面
//vim界面 vim是文件编辑器
i 进入编辑模式
Esc 退出回命令模式
:wq 保存退出
git commit -m "第一次提交" //把暂存区里面的文件全部提交到仓库区 交互信息为:第一次提交
git commit -am "第一次提交" //一次完成添加暂存和提交两个动作
===============
git log //查看提交记录
git log --oneline //查看简介的提交信息
==============
git ls-files //查看仓库里的文件
在该目录下创建一个文件
查看文件内容
下面可以再看一下状态
查看简介的提交信息
回退版本 回退到某一个版本
方便理解:
我们分了三次提交 三个文件
这个适合想要回退到上一个版本的话,就需要使用git reset命令
用soft 参数回退到了上一个版本: 工作区和暂存区的内容都 不会 被清空
而file3是第三个版本(第三次)才添加的,所以对于第二个版本来说,file3文件就是一个新的文件。这个时候可以修改file3里面的内容,然后重新添加暂存和提交就可以了
用hard 参数回退到了上一个版本: 工作区和暂存区的内容都 会 被清空c
git reset --hard b4d139 //将仓库回退到某一时间点
用mixed 参数回退到了上一个版本: 工作区的内容不会被清空 暂存区的内容 会 被清空
git reflog //查看操作的历史记录 找到误操作之前的版本号
//然后 回退一下到原来的版本
1️⃣查看工作区 暂存区 本地仓库之间的差异
2️⃣查看不同版本之间的差异
3️⃣查看两个分支之间的差异
git diff //后面什么都不加默认 工作区和暂存区之间的差异 显示发生更改的文件以及更改的详细的信息
git diff HEAD//比较工作区和版本库之间的差异
git diff --cached // 比较暂存区和版本库之间的差异
git diff 版本号ID 版本号ID//比较两个版本之间的差异
//HEAD 指向分支的最新提交节点
git diff 版本提交ID HEAD //当前版本号和HEAD之间的差异
git diff HEAD~ HEAD//比较当前版本和上一版本之间的差异
git diff HEAD~3 HEAD//比较当前版本和上3个一版本之间的差异
git diff HEAD~3 HEAD file3.txt//比较file3.txt 当前版本和上3个一版本之间的差异
举个
比如原来的仓库状态 和文件内容
修改file3.txt的内容后 用git diff 查看一下
git diff 不加任何东西 比较的是工作区和暂存区之间的差异 由于我们在工作区进行修改了file3.txt 所以会存在差异
如果没有任何内容就是说工作区和暂存区 是相同的 没有差异 就不会返回值
//方法一
git rm file2.txt//把工作区和暂存区中的file2.txt文件一起删除
//!!同时记得提交 否则删除的文件在版本库中还是存在的
//方法二
//先从工作区删除 然后再从暂存区删除
rm file2.txt
git add file2.txt
git rm --cached file1.txt //从暂存区和版本库中删除 但是保留在工作区
git rm -r* //递归删除某个目录下的所有子目录和文件
忽略掉一些不应该被加入到版本库中的文件,起到节约内存的作用
系统或者软件自动生成的文件
编译产生的中间文件和结果文件
运行时生成日志文件、缓存文件、临时文件
涉及身份、密码、口令、秘钥等敏感信息文件忽略日志文件和文件夹
忽略所有.class文件
忽略所有.o文件
忽略所有.env文件
忽略所有.zip和tar文件
忽略所有.pem文件
echo file1.log > .gitignore
//把file1.log添加到.gitignore文件 这样就不会显示file1.log的具体内容了(看不见啦)
//编辑.gitignore的内容 增加 *.log 就可以把所有.log文件写入gitignore 也就是相当于忽略了所有的log 文件 但是需要注意的是 只对暂存区和工作区的文件有效 对于已经提交到仓库里的文件是没有效果的
vi .gitignore//通过vim编辑gitignore文件的内容即可
.gitignore可以忽略通配符 文件夹等的内容
忽略通配符:*.log
忽略文件夹 文件夹名称/ 比如:tmp/
⭐️同时github上提供了各种常用语言的忽略文件的模板可以新建仓库时直接使用https://github.com/github/gitignore
首先创建两个文件.log 文件
看看此时仓库的状态:可以看到两个文件都还未被添加到暂存区
现在使用.gitignore 同时看看.gitignore文件具体的内容
此时仓库的状态
现在将工作区的文件添加到暂存区并提交到仓库中:可以看到里面没有我们的access.log文件
首先点击左上角的猫猫头像
然后再点击new
进入创建的页面之后 配置
点击create repository后来到以下界面
https和ssh:远程仓库地址的两者方式
https:本地仓库push到远程仓库的时候需要验证用户名和密码
ssh:不要验证用户名和密码 但是需要在GitHub上配置添加SSH公钥的配置 更安全也更方便
这里我们使用ssh 方式
回到根目录 也就是home 一般是c盘
cd .ssh//进入ssh目录
ssh-keygen -t rsa -b 4096//生成ssh密钥 -t rsa 是协议 -b 4096 大小是4096
此时如果你是第一次配置 直接回车即可
如果前面已经配置过 就会覆盖掉前面已经配置的密钥 这个时候不要直接回车 输入一个新的文件名 比如test 再回车
再输入密码
最后看看具体的内容
打开公钥文件 复制公钥文件的内容
打开GitHub 点击你的右边的头像 点击setting 来到下面的页面:
把公钥复制即可
如果你是第一次配置的话 那么现在配置部分就已经结束啦!
但是你是之前配置过的 还需要回到命令行再增加下面的内容
//当我们访问GitHub的时候 指定使用SSH下的test这个密钥
vi config
#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test
回到本地仓库 执行git clone
这样就克隆成功了
现在我们在这个仓库中添加一个文件 但是这个文件只是在本地仓库中起效果 远程仓库中并没有改变 所以需要把这个本地仓库的状态同步给远程仓库
git push //把本地仓库的内容同步到远程仓库
//以下步骤逐一执行可实现本地仓库push 到远程的另一个仓库
git remote add origin git@github.com:xi-song/first-repo.git // 把本地仓库和远程仓库关联
git remote -v //查看本地仓库和远程仓库的别名m和地址
git branch -M main// 指定分支的名称为main
git push -u origin main:main // -u 是upstream把本地的main分支和远程的orign仓库的main分支关联起来
//main:main 把本地仓库的main 分支 推送给远程仓库的main 分支
git push -u origin main //如果本地仓库的分支和远程仓库的分支相同就只写一个main就可以了 即
当前仓库对于远程仓库的别名为origin
首先可以来到远程仓库的页面 添加一个文件
这个时候本地仓库还没有这个文件 这个时候就要用pull命令来拉去远程仓库修改的内容
git pull origin main //拉取仓库别名为origin的main 分支 拉取到本地进行合并
git pull //直接默认为 拉取仓库别名为origin的main 分支 拉取到本地进行合并
============
git fetch//只是获取远程仓库的修改,但是不会自动合并到本地仓库中,而实需要我们手动合并
执行git pull 之后 Git 会自动为我们执行一次合并的操作,如果远程仓库中的修改内容和本地仓库中的修改内容没有冲突的话,那么合并操作就会成功。否则合并操作就会因为冲突而失败。
用法大差不差 后续可以继续学习
分支 就像是树的分叉一样
比如同一个项目–记作项目A 需要几个人共同协作,那么这几个人都可以对这个项目仓库在各自的分支进行操作,当然,最后完工的时候,可以合并。各个分支互不影响,这样就能实现合作啦!
A项目
git branch //查看分支
git branch dev //创建一个名字叫dev的分支
git switch dev //从当前分支切换到dev分支
git merge dev //将dev分支合并到当前所在的分支
git branch -d dev //删除dev分支(此时dev未合并)
git branch -D dev //删除dev分支(此时dev已合并)
git log --oneline --graph --decorate --all//查看图形化的分支
//这句太长了 可以定义一个别名 比如graph 那么下一次调用的时候直接输入graph 就可以了
alias graph="git log --oneline --graph --decorate --all"
git checkout -b dev 244d3//之前dev删除了,现在把dev 分支恢复回来 dev 244d3 后面是它提交的ID 可以在git log 里面看提交的ID
两个分支修改了同一个文件的同一行代码,最后要合并成大项目的时候,git就不知道应该保留那个分支的修改内容了,也就需要手动解决冲突
Rebase也是将不同的分支整合在一起
可以在任意分支执行base记录
当前分支是main分支,切换到dev分支 :git switch dev 然后变基到main 分支
当前分支是dev分支,切换到main分支 :git switch main 然后变基到dev
merge
优点:不会破坏原分支的提交历史,方便回溯和查看。
缺点:会产生额外的提交节点,分支图比较复杂。
适合协同工作
rebase
优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
缺点:会改变提交历史,改变了当前分支branch out的节点。避免在共享分支使用。
适合个人工作管理
1️⃣main分支
项目的核心分支 应该保证项目中的主线分支的代码时可发布的。一般来说主线发分支会部署到生产环境中。
主线分支的代码不允许直接修改,只能通过合并分支的方式进行修改,每次合并分支都建议生成一个新的版本号,这样可以方便追踪和回溯。可以通过给git tag 命令来标记版本号。
【版本号规则】
主版本(Major Version) :主要的功能变化或重大更新;
次版本(Minor Version) :一些新的功能、改进和更新,通常不会影响现有功能;
修订版本: (Patch Version):一些小的bug修复,安全漏洞补丁等。通常不会更改现有功能和接口。
2️⃣hotfix 问题修复分支
3️⃣ develop 开发分支 用于开发和测试
4️⃣ feature 功能分支
5️⃣release 发布分支 预发布分支
分支命名
推荐使用带有意义的描述性名称来命名分支
版本发布分支/Tag 示例:v1.0.0
功能分支示例: feature-login-page修复分支 示例:hotfix- #issueid-desc
分支管理
定期合并已经成功验证的分支,及时删除已经合并的分支
保持合适的分支数量
为分支设置合适的管理权限
大家可以探索一下 很方便!需要充分理解git的原理之后用起来会很顺利~
需要下载的拓展有
好啦!完结~ 欢迎大家留言讨论(点个赞点个赞~ 嘻嘻~)