git小白进阶之路
git是最常用的版本控制工具,我对其进行了整理后续补充,这个文档欢迎大家来讨论,当前我的视频梳理: git小白进阶之路_哔哩哔哩_bilibili,非常希望大佬们能够批评指正,并多多交流。
目录
初始配置
配置账号密码
配置ssh-key
添加公钥在远程仓库
git工作流
git文件状态
git别名
git撤销
1.从本地仓库 到 暂存区
2.从暂存区 到 工作目录
3.从本地仓库到工作目录
4.修改刚才提交的注释
5.回滚提交
git commit注释格式
git分支
拉取代码
提交代码
追溯代码
合并代码
git merge相关
git cherry-pick 相关
打补丁
git format-patch
git apply
git am
历史记录
调整历史记录
贮藏改动
git stash贮藏
列出所有贮藏的改动:
应用stash:
丢弃贮藏
远程仓库Remote
其他整理
1.解决git无法处理wsl虚拟机中的项目,
2.设置git内部环境变量
图形工具
参考文档
初始配置
配置账号密码
git config --list
# 设置git的name
git config --global user.name "determination"
# 设置git的邮箱
git config --global user.email "XXXX.@XX.conm"
配置ssh-key
ssh-keygen -t rsa -C "username@email.com"
添加公钥在远程仓库
获取公钥:在~/.ssh目录下
C:\Users\24964\.ssh目录下
cd ~/.ssh
ls
# 查看公钥
cat id_rsa.pub
git工作流
git文件状态
对换行符的替换
git config --global core.autocrlf false
git别名
参考:Git - Git 别名
格式:git config --global alias.<alias-name> <command>
设置 Git 命令别名,例如:
$ git config --global alias.st status
# 设置commit别名
git config --global alias.ci commit
# 设置status别名
git config --global alias.st status
git撤销
https://www.cnblogs.com/lfxiao/p/9378763.html
撤销commit并保留刚才的commit:
1.从本地仓库 到 暂存区
# 不删除工作目录代码,撤销到commit到暂存区
git reset --soft HEAD^
2.从暂存区 到 工作目录
# 不删除工作目录代码,撤销到工作区
git reset HEAD .
3.从本地仓库到工作目录
# 不删除工作空间代码,撤销commit、add
git reset --mixed HEAD^
# 相当于上述两个,即 git reset --soft HEAD^ 和 git reset HEAD .# 删除工作代码,撤销commit、add
git reset --hard HEAD^
4.修改刚才提交的注释
# 修改最后一次提交,可用来修改提交信息。
git commit --amend
5.回滚提交
# 回滚提交,创建一个commit,其实内容是回滚版本的
git revert
git commit注释格式
对于小型项目格式可以参考:使用 commitizen 规范 Git 提交说明
类型 | 说明 | example |
feat | 新功能 | feat:添加XXX接口 |
fix | 修复bug | fix:修复XXX bug |
style | 格式化变动,不影响代码逻辑 | style:格式化代码 |
improvement | 对当前功能改进 | improvement:改进功能 |
refactor | 重构 | refactor:重构 |
test | 添加或修改test代码 | test:添加XX测试代码 |
chore | 杂项,不修改源代码与测试代码 | chore: |
revert | 撤销 | revert: |
git分支
git分支本质就是指向提交对象的指针,HEAD指针指向当前的本地分支。
# 查看当前本地分支
git branch# 切换分支
git checkout <branch_name># 合并分支
git merge <branch_name>
默认:快进合并fast-forward merge,简单的将指针推进
非快进合并:多出一个合并节点,看起来会更清晰。
拉取代码
从远程仓库取回所有分支的更新,但不会修改本地工作目录的内容,拉取后的更新需要本地再合并,此时HEAD指针不变
# 拉取仓库代码更新
git fetch# 将会提示分支可以快进
git status# 合并分支
git merge 或 git rebase
git pull = git fectch + git merge
拉取远程代码,并且自动与本地的合并
git pull
git pull --rebase = git fectch + git rebase
rebase 会重新应用本地的提交,这会使历史记录是线性的。在开发过程中,推荐总是使用git pull --rebase 更新代码。
git pull --rebase
提交代码
# 暂存
git add <dir># 提交到本地仓库
git commit -m "<message>"# 修改最后一次提交
git commit --amend# 提交到remote
git push
追溯代码
由于commit-id一般不方便记忆,开发过程中在简单情况可以用~和^来追溯版本。
ref~表示第一个父级(等价ref~1),ref~2表示 第一个父级的第一个父级
ref^表示第一个父级(等价于ref^1),ref^2表示提交的第二个父级
在简单情况可以用ref~或^来追溯,复杂情况直接用commit-id会更方便。
合并代码
git merge相关
# 默认,快进合并
git merge
# 非快进合并
git merge --no-ff
git cherry-pick 相关
git cherry-pick:git cherry-pick 教程 - 阮一峰的网络日志
# 合并提交,-x 在提交信息末尾追加来源,-s 追加操作者签名。
git cherry-pick -x <commit># 合并多个连续的提交,左开右闭区间。
git cherry-pick <commit1>..<commit2># 合并多个连续的提交,左闭右闭区间。
git cherry-pick <commit1>^..<commit2>
打补丁
git提供两种打补丁方式,1:git diff 生成的UNIX标准补丁.diff文件,不带有commit记录 2. git format-patch 生成的git专用.patch文件,带有commit记录信息
可以参考:https://www.cnblogs.com/ArsenalfanInECNU/p/8931377.html
git format-patch
# 生成最近n次提交的补丁
git format-patch HEAD~n
git apply
git apply不会将commit message等打上去,打完patch后需要重新git add和git commit,相当于你改动的代码
git apply XXXX.patch# 查看patch的情况
git apply --stat XXXX.patch# 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上
git apply --check XXXX.patch
git am
git am会将patch的所有信息打上去,并且不用add、commit,因为他会应用commit上去,信息是patch上面的的author、message等等,不是打patch的。
# 打入补丁(会生成提交),--keep-cr 防止回车符被移除导致打补丁失败,冲突时可使用 --reject 查看冲突。
git am --keep-cr XXXX.patch# 添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者
git am --signoff XXXX.patch
历史记录
# 查看与某个字符串 string 相关的改动,可用来查看某个函数相关的改动。
git log -S <string># 查看一个文件或目录的历史记录,可用来查看某个文件是何时被删除的。
git log -- <path>
Git 会在后台保存一个引用日志(reflog),引用日志只存在于本地仓库。每一次提交或改变分支,引用日志都会被更新。可以此恢复丢失的提交。
# 查看本地仓库 HEAD 指针的所有变更,可用于恢复丢失的代码。
git reflog# 追踪代码改动。实际开发过程中建议使用 Git 可视化工具。
git blame
调整历史记录
在开发过程中,很多情况我们都可能需要修订历史记录,eg:信息填错、某条记录代码有问题、某条记录代码太多想要拆分,在代码提交到远程仓库之前,我们可以随便在本地修改历史记录。
git没有修改历史记录的工具,但是可以通过变基命令来变基系列提交来达到修改历史记录的目的。
# 以交互方式重新应用最近n次的提交,可对提交进行修改,注意不要修改到已经推送到远程仓库的提交。
git rebase -i HEAD~n
git rebase -i 合并多个commit提交-Git-安卓笔记本
git 为我们提供了以下几个命令:
- pick:保留该commit(缩写:p)
- reword:保留该commit,但我需要修改该commit的注释(缩写:r)
- edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
- squash:将该commit和前一个commit合并(缩写:s)
- fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
- exec:执行shell命令(缩写:x)
- drop:我要丢弃该commit(缩写:d)
在编辑模式中,修改,最后保存。
例如我想把我写的这两个commit合并到一块:
git rebase -i HEAD~2
编辑当前合并之后的commit message
对多个本地commit合并完成。
贮藏改动
使用git stash命令保存和恢复进度_git stash用法-CSDN博客
https://www.cnblogs.com/zndxall/p/9586088.html
当你工作做一半的时候,你的代码已经有了一些改动,你可能需要切换到另一个分支干活,或更紧急的事情处理,这是你不想因为这个没做完的改动而commit。这时就可以git stash将代码贮藏。贮藏的代码保存在一个栈上,可以在任何时候重新应用。
或者是你在拉取代码时遇到冲突,你可以先git stash贮藏起来,那么就可以顺利拿到最新代码,在重新应用解决冲突。
git stash贮藏
贮藏文件的修改,请注意未跟踪untracked的不会贮藏,例如:新增的文件没有add的话,不会贮藏
使用 -u 也会贮藏未跟踪(Untracked)的文件。
# 跟踪改动Modified的文件,请注意untracked不会贮藏
git stash# untracked也会贮藏
git stash -u# 可以添加备注,可以方便查找
git stash save "save message"
列出所有贮藏的改动:
git stash list
应用stash:
请注意:
-
- git stash apply,不会在对应的栈中删除
- git stash pop 会应用最近的一次贮藏改动,并出栈
# 应用最近一次的 贮藏 改动
git stash apply# 跟上shach@{n}指定对应记录
git stash apply stash@{n}# 应用最近一次的贮藏的改动,并丢弃这条
git stash pop
丢弃贮藏
# 丢弃最近一次贮藏的改动,后面跟上 stash@{n} 可指定对应的记录
git stash drop# 丢弃所有的贮藏改动
git stash clear
远程仓库Remote
克隆代码到本地仓库
git clone XXXX.git
管理远程
git remote作用:
1.git remote 不带参数,列出已经存在的远程分支
2.git remote -v | --verbose 列出详细信息,在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。
3.git remote add url 添加一个远程仓库
4、git remote rm name # 删除远程仓库
5、git remote rename old_name new_name # 修改仓库名
# 删除远程仓库分支emergent-fix
git push origin --delete emergent-fix
其他整理
1.解决git无法处理wsl虚拟机中的项目,
fatal: detected dubious ownership in repository at '//wsl.localhost/Ubuntu/home/wps/projects/ksogit/xfx'
To add an exception for this directory, call:
git config --global --add safe.directory "*"
2.设置git内部环境变量
在 ~/.bashrc
中加入
例如我的
# 在windows中:C:\Program Files\JetBrains\GoLand 2023.3\bin
export PATH="/c/Program Files/JetBrains/GoLand 2023.3/bin:$PATH"
那么就可以在git当中使用goland64 . 用goland来打开当前文件夹作为项目了。
图形工具
tortoisegit:
tortoise git无法管理wsl下的库-CSDN博客
文件上的图标,可以反映出当前文件或者文件夹的状态.例如:
sourcetree:https://www.cnblogs.com/Can-daydayup/p/13128633.html
参考文档
- Git官方推荐书籍:Git - Book
- Learn Git Branching
相关文章:

git小白进阶之路
git是最常用的版本控制工具,我对其进行了整理后续补充,这个文档欢迎大家来讨论,当前我的视频梳理: git小白进阶之路_哔哩哔哩_bilibili,非常希望大佬们能够批评指正,并多多交流。 目录 初始配置 配置账号…...
哈希表——C++
目录 一、首先使用拉链法: 二、开放寻址法 三、字符串哈希 1.具体如何使用进制的方式来存储字符前缀的可以看这个y总的这个图 2.接下来说一说算某个中间的区间的字符串哈希值 哈希表是一种数组之间互相映射的数据结构,比如举个简单的例子一个十个的数…...

LabVIEW叶片厚度远程监控
LabVIEW叶片厚度远程监控 随着网络技术的高速发展,远程监控广泛应用在各个领域。本文介绍了一种基于LabVIEW的植物叶片厚度远程监控系统,旨在实现对植物生长状况的精准监测和分析。 该系统利用LabVIEW软件开发工具,通过TCP网络协议实现数据…...

el-table动态合并
废话就不多说了,直接上代码!!! 合并行 // 方法一 <template><div class"container"><el-table :data"dataSource" :border"true":header-cell-style"{ font-weight: normal,…...

【DevOps】产品需求文档(PRD)与常见原型软件
文章目录 1、PRD介绍1.1、概述1.2、前提条件1.3、主要目的1.4、关键内容1.5、表述方式1.6、需求评审人员1.7、一般内容结构 2、需求流程3、常见原型软件3.1、Word3.2、Axure3.2.1、详细介绍3.2.2、应用分类3.2.3、优缺点 3.3、摹客RP3.4、蓝湖3.5、GUI Design Studio 1、PRD介绍…...
【QT+QGIS跨平台编译】之十八:【Expat+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、Expat介绍二、文件下载三、文件分析四、pro文件五、编译实践一、Expat介绍 Expat库最初由James Clark创建,已经成为许多编程语言中常用的XML解析工具。它以其简单、快速和可靠的特点而受到广泛的认可和使用。 Expat库的优点包括: 快速:Expat的解析速度非常快…...
20240203
1.项目经理正在为新项目制订进度计划,项目的成功取决于使用需要政府颁发特殊环境许可证的设备,在网络图的设计过程中,项目经理应该做什么以确保正确的活动排序? A.使用滚动式规划考虑项目不确定性 B.分析外部依赖关系,…...

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子
本节介绍了用于处理特征的算法,大致可以分为以下几组: 提取(Extraction):从“原始”数据中提取特征。转换(Transformation):缩放、转换或修改特征。选择(Selection&…...

【知识点】设计模式
创建型 单例模式 Singleton:确保一个类只有一个实例,并提供该实例的全局访问点 使用一个私有构造方法、一个私有静态变量以及一个公有静态方法来实现。私有构造方法确保了不能通过构造方法来创建对象实例,只能通过公有静态方法返回唯一的私…...

WPS WORD 宏导出高亮文本
WPS手机版可以直接导出高亮文本,但只能导出手机编辑的部分,如果同时在电脑上编辑过,电脑上高亮的无法导出,因为作者不一样。 但WPS电脑版没有这个功能,只能通过宏编程实现。 这里利用了审阅模式,在文字高亮…...

python 基础知识点(蓝桥杯python科目个人复习计划32)
今日复习内容:基础算法中的位运算 1.简介 位运算就是对二进制进行操作的运算方式,分为与运算,或运算,异或运算,取反,左移和右移。 (1)与运算 xyx&y000010100111 (2)或运算 …...

(算法二)滑动窗口
滑动窗口:既一块区域进行滑动,且不回退 往往解决的是一段连续空间中满足条件的最长或者最短子数组(串) 是由暴力解法(优化)——>不回退的滑动窗口解法 长度最小的子数组 无重复字符的最长子数组 此类题…...
【Go语言成长之路】Hello Go
文章目录 Hello Go一、建立工程目录二、开启代码追踪三、编写代码四、测试代码 Hello Go 一、建立工程目录 pzspzs-ubuntu22:~$ mkdir go_study/hello -p pzspzs-ubuntu22:~$ cd go_study/hello 在hello目录下,我们会编写属于自己的第一个Go demo例子࿰…...

大数据应用开发3-Scala笔记1
一、编程框架 Scala语言是在JVM上运行的,兼容Java语法 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。 类名 - 对于所有的类名的第一个字母要大写。 如果需要使用几个单词来构成一个类的名称,每个…...

android 网络拦截器统一处理请求参数和返回值加解密实现
前言 项目中遇到参数加密和返回结果加密的业务 这里写一下实现 一来加深记忆 二来为以后参考铺垫 需求 项目在开发中涉及到 登陆 发验证码 认证 等前期准备接口 这些接口需要单独处理 比如不加密 或者有其他的业务需求 剩下的是登陆成功以后的业务需求接口 针对入参和返回值…...

Jmeter直连mysql数据库教程
mysql数据库能够通过Navicat等远程连接工具连接 下载驱动并加入jmeter 1.mysql驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions) 找到对应的驱动下载:如下图: 把驱动jar包加入jmeter 配置jmeter连接mysql数据库…...

2024美赛数学建模B题思路分析 - 搜索潜水器
1 赛题 问题B:搜索潜水器 总部位于希腊的小型海上巡航潜艇(MCMS)公司,制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到该位置,并不受主船的束缚。MCMS现在希望用他们的潜水器带游客在爱奥尼亚海底探险&…...
Tomcat在Java web的应用
Tomcat在Java web的应用 本来这篇博客顺应之前的内容,应该是需要写Tomcat的简介、基本使用、配置和部署项目、Web的项目结构、创建MavenWeb、idea本地集成以及Tomcat的Maven插件的笔记内容,但是总觉得没必要,因为这些内容网上肯定很多了&…...

Python爬虫某云免费音乐——多线程批量下载
重点一:每首音乐的下载地址 重点二:如何判断是免费音乐 重点三:如何用线程下载并保存 重点四:如何规避运行错误导致子线程死掉 重点五:如何管理子线程合理运行 需要全部代码的私信或者VX:Kmwcx1109 运行效果&…...

Python实现TCP和UDP通信
目录 一:TCP 二:UDP 一:TCP 在Python中实现TCP通信可以通过使用内置的socket模块来完成。以下是一个简单的示例,展示了如何使用Python的socket模块创建一个TCP客户端和服务器。 TCP服务器 import socket def start_server(): s…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...