随心玩玩(十)git

写在前面:研究生一年多了,一直浑浑噩噩的,在深度学习的泥潭挣扎了好久,终于走出了精神内耗的泥潭…好久没有写博客了,决定重新捡起来…记录一下学习吧~

之前写了一篇git的博客,【github 从0开始的基本操作到fork和pr项目】,感觉就是快速入门,没有掌握精髓,今天重新学习一下

感谢【GeekHour】在b站提供的免费视频教程

看了看了以前的博客有种梦回初始的感觉

优雅的分割线↓


文章目录

  • 初始化配置
  • 新建仓库
  • 工作区和文件状态
  • 添加和提交文件
  • 查看提交记录
  • reset 版本回退
  • diff 查看版本差异
  • 删除文件
  • .gitignore 忽略文件
  • 关联远程
  • GUI
  • 分支branch
  • 解决冲突
  • rebase变基
  • merge和rebase优缺点
  • 工作流 gitflow
  • GitHubflow

初始化配置

查看版本
git -v
配置全局用户名
git config --global user.name "likeghee"
配置全局邮箱
git config --global user.email likeghee@163.com
保存用户名和密码
git config --global credential.helper store
查看配置信息
git config --global credential.helper store

新建仓库

先在github创建仓库
然后用git clone远程仓库拉取
git clone

工作区和文件状态

git的本地数据管理分为三个区域
分别是工作区,暂存区和本地仓库

工作区:.git所在目录,我们实际操作的目录
暂存区:.git/index,用于临时存放即将提交修改的内容
本地仓库:.git/objects,Git存储代码和版本信息的主要位置

git add:从工作区提交到暂存区
git commit:从暂存区提到本地仓库

文件状态:
查看当前仓库的状态
git status
为跟踪:untrack,新创建还没有被git管理
未修改:unmodified,git管理但是文件内容没有发生变化
已修改:modified,git管理已经修改的文件但是还没有添加到暂存区中
已暂存:staged,已添加到暂存区中
在这里插入图片描述

添加和提交文件

创建文件
这里我创建了一个a.py,用git status查看当前仓库的状态
在这里插入图片描述

红色就是未被跟踪的状态,使用git add a.py添加到暂存区,再用用git status查看当前仓库的状态,现在的文件已经是绿色,表示现在这个文件已经被添加到了暂存区,等待被提交,同时bash还提示我们使用git restore --staged <file>...可以取消暂存
在这里插入图片描述
提交到本地仓库
git commit -m "第一次提交测试"
在这里插入图片描述

可以使用通配符提交文件
git add *.py
添加当前目录所有文件
git add .

交互式提交仓库
git commit
在这里插入图片描述
在第一行写下提交信息
在这里插入图片描述
:wq提交至仓库

查看提交记录

查看提交记录
git log
查看简洁的提交记录
git log --oneline

在这里插入图片描述

reset 版本回退

git reset --soft id:回退到某个版本,并且保留工作区和暂存区的所有内容
git reset --hard id:回退到某个版本,并且丢弃工作区和暂存区的所有内容
git reset --mixed id--mixed是默认参数,回退到某个版本,只保留工作区而丢弃暂存区内容
id使用git log --oneline查看
在这里插入图片描述

一般来说,当我们连续提交了多个版本,但是又觉得这些提交有没有太大的意义,可以合并成一个版本的时候,就可以通过–soft或者–mixed这两个参数回退之后再重新提交,使用--soft 可以节省一步git add的操作

一般谨慎使用--hard这个参数,工作区都删除了,那么就无法找回了

误操作可以使用git reflog查看操作的历史记录,找到误操作之前的版本号
再使用git reset --hard id回到之前版本即可

diff 查看版本差异

diff可以查看工作区、暂存区、本地仓库之间的差异
也可以查看不同版本之间的差异
或者两个分支之间的差异

开发的时候我们更多会使用GUI工具

我在a3.py添加了一行123
使用git diff查看修改内容,默认比较工作区和暂存区之间的内容

在这里插入图片描述
git会将文件的内容使用hash算法生成一个40位的hash值
e69de29..d800886就是hash值的前7位和后7位
100644 表示文件权限
红色表示删除,绿色表示添加

比较工作区和版本库之间的差异
git diff HEAD

比较工作区和版本库之间的差异
git diff --cached

比较两个版本之间的差异
git diff id1 id2

比较版本和当前版本之间的差异
git diff id1 HEAD

比较上个版本和当前版本之间的差异
git diff HEAD~ HEAD

比较上两个版本和当前版本之间的差异
git diff HEAD~2 HEAD

比较上个版本和当前版本中具体文件的差异
git diff HEAD~ HEAD a.txt

删除文件

删除文件
再用git add提交暂存区

这样有的人觉得太麻烦,可以使用
git rm
将上面的两步合并

只删除版本库的文件,保留工作区文件
git rm --cached

但是最后都是需要用git commit提交至版本库

.gitignore 忽略文件

应该忽略哪些文件?
系统或者软件自动生成的文件
编译生成的中间文件
运行过程中生成的日志文件、缓存文件、临时文件
涉及身份、密码、口令、密钥等敏感信息文件

.idea要不要提交到仓库里?我看了下这篇知乎文章

.idea目录下的文件中有包含隐私的内容(比如你的文件操作变动、用户词典、系统环境变量、数据库密码等等),所以我为了安全考虑就不提交到仓库了
在git项目的根目录下,添加一个 .gitignore 文件
在这里插入图片描述

.gitignore 文件中写上我们将要屏蔽的文件.idea/
注意文件夹格式是以/结尾的

.idea/

再用git status查看就屏蔽了这两个文件了
在这里插入图片描述

注意不会忽略doc下子目录下的.txt文件
doc/*.txt
如果要忽略可以使用
doc/**/.txt

关联远程

… or create a new repository on the command line

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/yyz159756/test.git
git push -u origin main

… or push an existing repository from the command line

git remote add origin https://github.com/yyz159756/test.git
git branch -M main
git push -u origin main:main

GUI

https://git-scm.com/downloads/guis

推荐SourceTree
在这里插入图片描述

分支branch

创建一个dev分支
git branch dev

切换到dev分支
git switch dev

模拟一下dev的分支情况,现在main分支和dev分支已经分叉了,实际工作中这样情况是非常常见的,现在我们需要把dev分支合并到主线代码中
在这里插入图片描述

切换到main使用
git merge dev
将dev合并到main分支中
在这里插入图片描述

如果一个分支已经被合并到其他分支了,那么可以使用
git branch -d dev
来删除dev分支
在这里插入图片描述

解决冲突

我们创建一个feat分支,修改a.py
切换回main分支,我们也修改a.py
这样我们就有两个分支同时修改了a.py
在这里插入图片描述
我们在main分支尝试合并feat分支
git merge feat

就会出现conflict提示
在这里插入图片描述

使用git status查看冲突文件列表
在这里插入图片描述
git diff 查看具体的冲突的内容
在这里插入图片描述

=号上面的内容是main分支修改的内容
=号下面的内容是feat分支修改的内容

我们需要手动编辑这个文件
在这里插入图片描述
经过修改我们解决冲突

在这里插入图片描述
再进行git addgit commit
那么就自动完成了合并的过程
在这里插入图片描述

rebase变基

变基操作会找到当前两条分支的共同祖先,再把当前分支上从共同祖先到最新提交记录的所有提交移动到目标分支最新的提交的后面
变基到main,可以形象的表示成当前分支嫁接到main

切换dev,变基到main,那么就dev分支就会变基到dev
切换到main,变基到dev,那么main分支会变变基到dev

在这里插入图片描述

我们用之前学习的版本回退git rest来继续做实验

切换到dev,然后rebase

这时候dev分支就变基到了main上
在这里插入图片描述

merge和rebase优缺点

merge优点:不会破坏原分支的提交历史,方便回溯和查看
缺点:会产生额外提交节点,分支图复杂

rebase优点:不会新增额外的提交记录,形成线性历史,比较直观
缺点:改变提交历史,改变了当前分支branch out的节点,避免在共享分支上使用

工作流 gitflow

gitflow

main:只允许合并分支修改
hotfix:从main分支分离,修复完成后合并到main分支,一般会将hotfix分支删除
dev:从main分支分离,项目的核心分支
feat:从dev分支分离,用于开发新的功能
release:预发布分支,从dev分支分离,稳定后合并到主分支中,再将预发布分支删除

GitHubflow

只有main分支长期存在
1.git clone // 到本地
2.git checkout -b feat 切换至新分支feat
(相当于复制了remote的仓库到本地的xxx分支上
3.修改或者添加本地代码(部署在硬盘的源文件上)
4.git diff 查看自己对代码做出的改变
5.git add 上传更新后的代码至暂存区
6.git commit 可以将暂存区里更新后的代码更新到本地git
7.git push origin feat 将本地的featgit分支上传至github上的git


(如果在写自己的代码过程中发现远端GitHub上代码出现改变)
1.git checkout main 切换回main分支
2.git pull origin master(main) 将远端修改过的代码再更新到本地
3.git checkout xxx 回到xxx分支
4.git rebase main 我在xxx分支上,先把main移过来,然后根据我的commit来修改成新的内容
(中途可能会出现,rebase conflict -----》手动选择保留哪段代码)
5.git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上
(-f —》强行)
6.原项目主人采用pull request 中的 squash and merge 合并所有不同的commit


远端完成更新后
1.git branch -d xxx 删除本地的git分支
2.git pull origin master 再把远端的最新代码拉至本地

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/213402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM大语言模型(一):ChatGLM3-6B试用

前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的Agent等特性的研究。 本机环境 CPU&#xff1a;AMD Ryzen 5 3600X 6-Core Processor Mem&#xff1a;32GB GPU&#xff1a;RTX 4060Ti 16G ChatGLM3代码库下载 # 下载代码库 ​git c…

分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测

分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测 目录 分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量…

搭建若依框架完成医疗项目 ——业务流程及页面展示

目录 一、搭建若依项目 1.1 快速了解 1.1.1 技术选型 1.1.2 内置功能 1.2 环境部署 二、医疗项目业务 2.1 门诊模块 2.2 住院模块 2.3 药房药库 2.4 表设计 三、项目展示 3.1 项目背景 3.2 门诊功能模块 3.2.1 患者档案 3.2.2 门诊卡信息 ​编辑 3.2.3 患者…

【文末送书】人工智能背景下的C++编程方向

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Nginx转发内网Flv视频流

1、环境说明 Docker Nginx&#xff1a;1.21.5 实现Nginx ssl转发内网flv视频流 2、配置nginx.conf http {upstream live {server 10.10.10.10:8300;keepalive 64;}map $http_upgrade $connection_upgrade {default upgrade; close;}server {listen 80;listen 443…

echarts实现全国及各省市地图

echarts实现全国及各省市地图&#xff08;内附地图json文件&#xff09; 去阿里云就可以获取&#xff1a;[阿里云地理]&#xff1a;http://datav.aliyun.com/portal/school/atlas/area_selector#&lat31.769817845138945&lng104.29901249999999&zoom4(http://datav…

【自然语言处理】【大模型】VeRA:可调参数比LoRA小10倍的低秩微调方法

VeRA&#xff1a;可调参数比LoRA小10倍的低秩微调方法 《VeRA&#xff1a;Vector-based Random Matrix Adaptation》 论文地址&#xff1a;https://arxiv.org/pdf/2310.11454.pdf 相关博客 【自然语言处理】【大模型】VeRA&#xff1a;可调参数比LoRA小10倍的低秩微调方法 【自…

阿里微服务质量保障系列:性能监控

什么是性能监控&#xff0c;以及性能监控的对象有哪些。 伴随着突发流量、系统变更或代码腐化等因素&#xff0c;性能退化随时会发生。如在周年庆大促期间由于访问量暴涨导致请求超时无法下单&#xff1b;应用发布变更后&#xff0c;页面频繁卡顿导致客诉上升&#xff1b;线上…

Swing程序设计(7)JPane面板,滑动面板

文章目录 前言一、JPane面板&#xff0c;滑动面板是什么&#xff1f;二、实操展示 1.JPane面板2.JScrollPane面板总结 前言 该篇博客介绍Java的Swing程序中JPane面板以及&#xff0c;滑动面板的使用。面板的使用&#xff0c;各个组件在不同的面板上被不同地摆放&#xff0c;让插…

iceoryx(冰羚)-共享内存数据传输

上面的操作都是在共享内存中&#xff0c;发布进程拿到PublisherPortData对象&#xff0c;转换成PublisherPortUser对象&#xff0c;进行数据发送。 订阅进程拿到SubscriberPortData对象&#xff0c;转换成SubscriberPortUser对象&#xff0c;进行数据发送。 PublisherPortUser提…

Sharding-Jdbc(3):Sharding-Jdbc分表

1 分表分库 LogicTable 数据分片的逻辑表&#xff0c;对于水平拆分的数据库(表)&#xff0c;同一类表的总称。 订单信息表拆分为2张表,分别是t_order_0、t_order_1&#xff0c;他们的逻辑表名为t_order。 ActualTable 在分片的数据库中真实存在的物理表。即上个示例中的t_…

基础组件总结(以Element UI组件库为例)

一般对一个组件的使用方式&#xff1a; 每一个组件都有被绑定的数据&#xff0c; &#xff08;1&#xff09;首先会对组件的数据初始化&#xff08;a.data中赋初值 b. 在生命周期函数created或mounted中为变量赋予初值&#xff09; &#xff08;2&#xff09;由于不同组件的…

【全网首发】信任的进化深度解析(全文超1500字+超20张配图)

目录 前言 正文 -1.游玩链接 0.介绍 1.单次游戏 2.多次游戏 3.一次大赛 4.多次大赛 5.不信任的演变 6.人人都会犯错 7.沙盒游戏 8.结论 结尾 前言 本篇文章将深度解析《信任的进化》这款小游戏&#xff0c;里面仅个人观点。制作不易&#xff0c;不喜勿喷。 正文 …

SmartSoftHelp8,应用程序优化,稳定性优化,性能优化,并发承载优化工具

winform 应用全局捕获异常 WPF 应用全局捕获异常 asp.net web 应用全局捕获异常 MVC web 应用全局捕获异常 netcore 应用全局捕获异常 一级缓存&#xff1a;html、cs&#xff0c;js 网页前端缓存设置 二级缓存&#xff1a;asp.net 客户端缓存设置 二级缓存&#xff…

shell命令编写

1. 1 #!/bin/bash 2 3 directory_path"/txh"4 5 # 使用 find 命令查找指定路径下的文件&#xff0c;并使用 wc 命令统计行数&#xff08;即文件个数&#xff09;6 7 file_count$(find "directory_path" -type f | wc -l)8 9 10 echo "在路径$director…

Linux CentOS7 安装Docker

CentOS7安装Docker&#xff1a; Docker简介 Docker是一个开源的容器化平台&#xff0c;可帮助开发者轻松地创建、部署和运行应用程序。Docker使开发人员能够在一个独立的容器中打包应用程序及其依赖项&#xff0c;这样他们就可以轻松地将应用程序移植到任何其他环境中。Docke…

【Python】tensorflow学习的个人纪录(1)

def learn(self, s, r, s_):s, s_ s[np.newaxis, :], s_[np.newaxis, :]v_ self.sess.run(self.v, {self.s: s_})td_error, _ self.sess.run([self.td_error, self.train_op],{self.s: s, self.v_: v_, self.r: r})return td_error代码步入&#xff1a; v_ self.ses…

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化…

Ubuntu22.04无需命令行将软件更新源切换到国内

1、右上角打开设置 2、在设置中拉到最下面点击About&#xff0c;然后点击Software Updates 3、点击下拉框 4、选择other 5、找到China&#xff0c;选择一个网址&#xff0c;然后点击Choose Server 6、输入密码并回车 7、点击Close 8、点击Reload 9、等待完成即可 10、等结束之后…