【技术工具】源码管理 - GIT工具

【技术工具】源码管理 - GIT工具

1 前言

之前参考语雀一位大佬的,但链接找不到了,仅供参考。

  • 1、检查空白错误
//确认将提交的内容中有无空白信息
git diff --check   
  • 2、尝试让每一个提交成为一个逻辑的独立变更集
    • 尽量使每笔提交都成为独立的patch,这让你的同事审查你的改动时尽量让事情容易。
  • 3、重写提交历史
    • 正式提交之前,可以通过修改本地提交历史让提交后的信息更加易懂。
  • 4、规范化提交信息

2 提交模板

1、git config

~$ git config --global -e
....
#添加
[commit]template = /home/mi/.gitmessage

2、配置模板

~$ vim ~/.gitmessage#title [where/what]#JIRA-ID #brief description for this bug [what/why]#Change-Id:auto-generate

3、提交使用模板

~$ git commit -s  #尽量不用 git commit -m "xx"

4、查看提交记录

~$ git log --no-merges

3 生成patch

# 生成patch
git diff ./ > xxx.patch  #将差异的内容制作成patch
mkdir update && git diff commit-id-time1 commit-id-time2 --name-only | xargs -i cp '{}' ./update/ --parents #制作patch 把两个commit-id 之间修改的文件复制到update目录中 而且会把中间的目录也一并生成# 打patch
patch -p1 < xxx.patch

4 子模块管理

  • 子模块允许你将一个Git仓库当作另一个GIt仓库的子目录,这允许你克隆另一个仓库到你的项目中并保持你的提交相对独立配置文件再.gitmodules
  • 1)命令速查
git submodule --help # 查看说明## 克隆代码时带上子模块
git clone --recurse-submodules <repository>## 初始化本地.gitmodules文件
git submodule init## 添加子模块
git submodule add <repository> [<path>]## 拉取所有子模块
git submodule foreach git pull## 更新子模块
git submodule update --init --recursive --remote [<path>]
git submodule foreach git submodule update## 将子模块切到指定分支
git submodule set-branch -b master [<path>]

5 贮藏和清理

  • 贮藏(stash)会处理工作目录的脏状态 - 即跟踪文件的修改和暂存的改动。
  • 命令
$ git stash push 			# stash跟踪文件的修改与暂存的改动
$ git stash push --keep-index 		# --keep-index 选项使存储的同时保留索引。
$ git stash push --all				# -u 选项存储untracked文件,
$ git stash push -u 				# stash全部文件(包括被忽略文件)$ git stash list 			# 列出当前的stash
$ git stash apply   		# 应用stash, 加上--index 选项可以让之前暂存的文件重新暂存
$ git stash drop stash@{0}	# 移除stash,
$ git stash pop 			# 应用stash@{0},并移除它$ git stash branch dev  	# 创建新分支dev,然后应用stash,然后drop stash$ git clean -f -d 			# 移除工作目录中所有未追踪的文件以及空的子目录(不包括被忽略文件)
$ git clean -n 				# 演戏以下,加-n参数
$ git clean -n -x 			# -x选择清理忽略文件
$ git clean -x -i 			# -i交互模式

6 还原提交

git revert HEAD 		# 撤销当前HEAD指向的patch上的更改git revert commit		# 撤销制定commitid表示的patch上的更改# merge之后的revert
git revert -m 1 HEAD 	# HEAD指向的节点有两个父节点,-m 1保留父节点1,撤销父节点2带来的改变

7 重置操作

在这里插入图片描述

# 作用于某个patch
git reset --soft [patch]	#移动HEAD的指向,不改变Index和Work Directory
git reset --mixed [patch] #(默认reset)移动HEAD的指向,改变Index,但不改变Work Directory
git reset --hard [patch]	#移动HEAD的指向,改变Index和Work Directory# 作用于某个path/file
git reset [path/file]	#通过当前HEAD指向的patch改变当前Index(恢复暂存区)
git reset [patch] [path/file] #通过指定patch改变当前Index# 压缩提交
git reset --soft [patch] #HEAD移动到压缩提交的前一个patch,Index和Work Directory不变
git commit #通过Index创建新的patch

8 查看历史

# 常规使用
git log --oneline --graph --all #简略显示各种分支的patch记录,个人比较下常用这个命令
git log --stat    # 显示每次提交的文件修改统计信息。
git log -p 	# 按补丁格式显示每个提交引入的差异。# 定制化输出
# - --date=format定制作者修订日期格式
# - --pretty=format定制log记录显示
# - --graph图形显示分支与合并历史
# - --all显示所有分支
git log --pretty=format:"%h %s" --graph
git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:"%h-%an-%ad-%ae" --graph --all# 过滤出自己想要看到的log
git log -3  			#按次数,最近3次提交log
git log --since=2.weeks 	#按时间,最近两周提交log
git log --until=2020-03-20 	#按时间,2020-03-20前的提交log
git log --grep="update"	#仅显示提交说明中包含"update"的提交# 如果要在 Git 源码库中查看 Junio Hamano 在 200810 月其间, 除了合并提交之外的哪一个提交修改了测试文件,可以使用下面的命令:
git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

9 远程同步

  • 从远程获取最新的patch或分支,引用的信息记录到.git/FETCH_HEAD
### 从gerrit上取一个patch,然后pick到当前分支
git fetch ssh://wangjianfeng1@git.mioffice.cn:29418/device/xiaomi/merlin refs/changes/17/909617/1
git cherry-pick FETCH_HEAD### 获取远程库的分支更新,然后merge到本地分支
git fetch origin master:tmp #从远程仓库master分支获取最新,在本地建立tmp分支
git diff tmp #將當前分支和tmp進行對比
git merge tmp #合并tmp分支到当前分支

10 文件标注

mi@ubuntu:base$ git blame Android.bp -L 230,231  #查看Android.bp的230-231行提交记录,
#commit id   #提交者        #时间                      #行          #内容
7c469179ce2a (junyulai      2019-01-16 20:23:34 +0800 230)         "core/java/android/net/ISocketKeepaliveCallback.aidl",
e40eab608af2 (Benedict Wong 2018-11-14 17:50:13 -0800 231)         "core/java/android/net/ITestNetworkManager.aidl",

11 二分法查找

# 开始
$ git bisect start  # 启动二分
$ git bisect bad 	# 当前提交有bug
$ git bisect good <good_commit>  #指定已知的最后一次正常状态是哪次提交# 测试 --> 二分判断
$ git bisect good  # 当前提交无bug
$ git bisect bad   # 当前提交有bug# 结束
$ git bisect reset

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Objective-c Block 面试题

以下是对我们这整段关于 Objective-C 中 Block、__block 修饰符、内存管理行为、生命周期等内容的全面总结&#xff0c;并附带了一套适合面试准备的面试题集&#xff08;带答案&#xff09;。 &#x1f9e0; 一、知识总结&#xff1a;Objective-C Block __block 修饰符 ✅ Bl…

AndroidMJ-基础-05

基础part5: 9:测试相关 postman genemotion espresso 10:性能相关 profiler 9.测试相关 espresso相关&#xff1a; Android Espresso 自动化测试指南&#xff08;Java 版&#xff09;-CSDN博客 10.性能相关 profiler相关&#xff1a; AndroidStudio之内层泄漏工具Profiler…

R语言 | 如何使用R书写html文档?

更灵活的书写方式&#xff0c;可以直接看3. 1. 可用函数 cat()函数writeLines()函数sink()函数重定向输出到HTML文件 小结&#xff1a;cat()适合简单HTML&#xff0c;writeLines()适合多行内容&#xff0c;sink()适合复杂场景。 说明&#xff1a;尽可能不用R包&#xff0c;减…

oracle 表空间超过最大限度,清理数据释放内存

目录 一、扩容&#xff1a;参考 https://blog.csdn.net/weixin_40841731/article/details/134931289 二、清理数据 1、查询文件大小情况&#xff08;管理员账号&#xff09; 2、查询表的大小&#xff08;使用该表空间的用户&#xff09; 3、清理数据&#xff08;使用该表空…

初版BL程序一些细节整理(碎碎念)

一.串口的中断触发 一般我们都是使用TXE或者RXNE来触发中断&#xff0c;其实还有完整传输结束的TC标志位和接收完成的IDLE标志位 这两个标志位有些不同&#xff0c;RXNE标志位只需要读取寄存器就会自行清除&#xff0c;但是这两个需要读取两个&#xff0c;拿IDLE举例子 这里需要…

为何京东与蚂蚁集团竞相申请稳定币牌照?

京东与蚂蚁集团竞相申请稳定币牌照&#xff0c;主要是为了抢占数字金融新赛道&#xff0c;结合香港的宽松监管政策与全球稳定币市场的快速增长。香港2023年推出的稳定币监管框架及2025年8月即将实施的《稳定币条例》&#xff0c;为企业提供了合规路径&#xff0c;吸引京东通过币…

[特殊字符] Harmony OS Next里的Web组件:网页加载的全流程掌控手册

&#x1f389; Harmony OS Next里的Web组件&#xff1a;网页加载的全流程掌控手册 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习&#xff0c;有错误之处请指出我会修改。 开发者必看的生命周期回调详解代码实操指南 作为开发者&#xff0c;你可能经常需…

【Java学习笔记】集合介绍

集合 > > 集合的引出 在之前常使用数组存储数据&#xff0c;存在的问题如下&#xff1a; &#xff08;1&#xff09;初始化时&#xff0c;长度必须指定&#xff0c;而且一旦指定&#xff0c;不能更改 &#xff08;2&#xff09;不方便扩容&#xff08;使用循环复制原…

电流传感器在汽车中的应用:从BMS电池管理到电机控制的工程解析

1 电流传感器&#xff1a;汽车电子系统的神经末梢 在现代汽车电子架构中&#xff0c;电流传感器已从简单的测量元件演变为​​关键的安全与性能组件​​。作为动力系统的“神经末梢”&#xff0c;它们持续采集电流参数并反馈至控制单元&#xff0c;构成​​实时闭环控制的基础…

积分商城拼团系统框架设计

一、逻辑分析 用户相关逻辑 用户注册与登录&#xff1a;用户需要注册账号才能参与积分商城拼团活动。注册过程中需收集必要信息&#xff0c;如用户名、密码、联系方式等。登录功能则用于验证用户身份&#xff0c;方便用户后续操作。用户积分管理&#xff1a;用户通过各种途径&a…

java 数据结构-HashMap

一、hashmap特点 1、HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 2、HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。 3、HashMap 是无序的,即不会记录插入的顺序。 4、HashMa…

DBSyncer:一款开源的数据同步工具

DBSyncer&#xff08;简称 dbs&#xff09;是一款开源的实时数据同步中间件&#xff0c;提供 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Elasticsearch、Kafka、File、SQL 数据库等同步场景&#xff1b;支持上传插件自定义同步转换业务&#xff1b;提供监控全量和增量数…

大型语言模型的中毒攻击的系统评价

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 随着预训练大型语言模型 &#xff08;LLM&#xff09; 及其训练数据集的广泛使用&#xff0c;人们对与其使用相关的安全风险的担忧显著增加。 这些安全风险之一是 LLM 中毒攻击的威胁&#xff…

Windows 10更新失败解决方法

前言 在我们使用 Windows 时的时候&#xff0c;很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新&#xff0c;正在撤销更改” 这种情况非常烦人&#xff0c;但其实可以通过修改文件的方法解决&#xff0c;并且正常更新到最新版操作系统 01修改注册表 管理员身份…

Redis高级|Redis单线程VS多线程(基础)

文章目录 面试题Redis为什么选择单线程为什么逐渐加入多线程特性Redis6、Redis7的多线程特性和IO多路复用入门Redis7多线程 面试题 Redis到底是单线程还是多线程&#xff1f;IO多路复用听说过吗&#xff1f;Redis为什么这么快&#xff1f; Redis为什么选择单线程 其实Redis单…

ONLYOFFICE 的AI技巧-1.集成OCR、文本转图像、电子表格集成等新功能

随着人工智能不断革新数字办公空间&#xff0c;我们通过全新的 ONLYOFFICE AI 插件再次实现突破。无论您是长期用户还是新手&#xff0c;这些更新都将让您的文档处理更加智能、直观且高效。让我们一起来了解这些最新增强功能——部分功能已在 ONLYOFFICE 文档 8.3.3 版本中上线…

Snipaste:一款简单强大的跨平台截图工具

给大家介绍一款我在日常写作中使用的截图工具&#xff1a;Snipaste 。它是一个支持截图&#xff08;Snip&#xff09;和贴图&#xff08;Paste&#xff09;功能的免费软件&#xff0c;支持 Windows、macOS、Linux 跨平台。 智能截图 Snipaste 提供了强大的截图功能&#xff0c…

python学习打卡day52

DAY 52 神经网络调参指南 知识点回顾&#xff1a; 随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 作业&#xff1a;对于day41的简单cnn&#xff0c;看看是否可以借助调参指南进一步提高精度。 day41的简单CNN最后的结果&#xff0c;今天要做…

自定义线程池 4.0

自定义线程池 4.0 1. 简介 上次我们实现了自定义线程池的 3.1 版本&#xff0c;提供了线程工厂创建线程和工具类创建简单线程池的功能&#xff0c;增强了线程池的灵活性&#xff0c;并且用起来更加方便了&#xff0c;本文我们将做如下的优化&#xff1a; 给线程池添加关闭的…

list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘

SELECT list is not in GROUP BY clause and contains nonaggregated column mydb.t.address which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 关于查询列不在分组字段内触发错误 之前我一直使用其…