git常用功能使用介绍

文章目录

  • GIT特殊功能使用介绍
    • 1. git log 相关
      • 1.1 查看一个文件的修改历史记录:git log -p filename
        • 1.1.1 查看一个文件的所有改动历史记录:git log --pretty=oneline 文件名
        • 1.1.2 查看这个文件的某次提交的改动记录(git show 提交的hash值 文件名)
      • 1.2 查看某个开发人员提交记录:git log --author=jack
      • 1.3 使用git log统计工作量
        • 1.3.1 按提交时间段来统计
        • 1.3.2 按用户名来统计
        • 1.3.3 按用户名和时间段来统计
        • 1.3.4 统计自己一天代码行数
        • 1.3.5 其他的统计方法
        • 1.3.6 使用find命令统计JS、css代码量
    • 2. 合并多个commit
    • 3. 修改最后一次commit注释
    • 4. 代码回滚到以前的版本
      • 4.1 代码还没有push到远程仓库
      • 4.2 代码已经push到远程仓库
        • 4.2.1 代码刚push,还没有扩散
        • 4.2.2 代码已经被其他开发拉取或已经被自动部署工具拉取了
    • 6.查看两个分支某个文件的差异

GIT特殊功能使用介绍

1. git log 相关

1.1 查看一个文件的修改历史记录:git log -p filename

-p作用:可以显示每次提交的diff,不加-p值查看

git log -p doc/git/004-git常用功能使用介绍.mdcommit 65f8493043498c8f9ad6349129e53a2d81ba3ebe
Author: user <user@outlook.com>
Date:   2021-06-23 17:12:36git常用功能使用介绍 文档修改diff --git a/doc/git/004-git常用功能使用介绍.md b/doc/git/004-git常用功能使用介绍.md
index 0ca6418..947d869 100644
--- a/doc/git/004-git常用功能使用介绍.md
+++ b/doc/git/004-git常用功能使用介绍.md
@@ -174,6 +174,8 @@ git fetch -a && git checkout $branch && git pull`$branch`是Jenkins里面的分支名字变量。+也可以修改Jenkins配置,在构建环境选项下面,把`Delete workspace before build starts`选线勾选上(在构建前删除工作空间)。然后部署即可,构建成功后在修改配置,把这个选项取消。
1.1.1 查看一个文件的所有改动历史记录:git log --pretty=oneline 文件名
~ git log --pretty=oneline package.json60e56ca779e269a4c16a0bb2bb57d845c551f725 添加echarts包
20f437c268646797ce7680c1117eb0c8db23f3b0 添加base-64的包
76087b874926b6b62bd8455309c681bd0c8bc2f7 删除无用的lib
a8f7f419b2cb6e279f92a5660141fd32bbd963b3 自动计算高度
...
1.1.2 查看这个文件的某次提交的改动记录(git show 提交的hash值 文件名)
~ git show 60e56ca779e26 package.jsoncommit 60e56ca779e269a4c16a0bb2bb57d845c551f725
Author: user <user@outlook.com>
Date:   Mon May 17 16:28:54 2021 +0800添加echarts、echarts-gl包diff --git a/package.json b/package.json
index 8118086..08306c8 100644
@@ -15,6 +15,8 @@"base-64": "^1.0.0",
+    "echarts": "^5.0.0","js-cookie": "^2.2.1",

1.2 查看某个开发人员提交记录:git log --author=jack

~ git log --author=jackcommit 12aa78580248f98a5cae4b506ad5144b9f37c092 (HEAD -> master, origin/master, origin/HEAD, mayun/master)
Author: jack <jack@outlook.com>
Date:   2023-05-24 17:09:08Mac系统操作习惯设置 文档编辑:添加mac操作系统升级说明

1.3 使用git log统计工作量

1.3.1 按提交时间段来统计

此方法统计从提交的开始时间到结束这一段时间所有的提交代码

git log --since=2018-01-01 --until=2018-12-31 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'added lines: 36874, removed lines: 12214, total lines: 24660

上面的git命令按照2018-01-012018-12-31这段时间来统计你的代码提交量

1.3.2 按用户名来统计

此方法可以统计项目中,该用户的工作量

git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'added lines: 29146, removed lines: 7457, total lines: 21689

注意把username改成真正的用户名。

1.3.3 按用户名和时间段来统计

此方法过滤一段时间内,某个用户的代码量

git log --author="username" --since=2018-10-01 --until=2018-12-31 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'added lines: 2068, removed lines: 953, total lines: 1115

注意把username改成真正的用户名。

1.3.4 统计自己一天代码行数
git log --author="$(git config --get user.name)" --no-merges --since=1am --stat
git log --author="$(git config --get user.name)" --no-merges --since=1am --stat --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
1.3.5 其他的统计方法

查看仓库提交者排名前 5

git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

贡献值统计

git log --pretty='%aN' | sort -u | wc -l

提交数统计

git log --oneline | wc -l

添加或修改的代码行数:

git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/'
1.3.6 使用find命令统计JS、css代码量
js统计命令:find src/ -name "*.js*" |xargs cat|grep -v ^$|wc -l
css统计命令: find src/ -name "*.scss*" |xargs cat|grep -v ^$|wc -l

2. 合并多个commit

这个合并操作是在本地仓库,如果提交记录已经提交到远程仓库中了,如果别人还没有拉取,那么可以使用强制推送覆盖掉远程仓库的提交git push origin -f

1、如下图,有三个commit需要合并:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

复制第四个commit的hash值后,使用git rebase -i 568361540e8c命令开始合并:

~ git rebase -i 568361540e8c

2、执行命令后,终端会进入一个VI编辑界面,如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在VI编辑界面里面,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。

目前需要用的指令有两个pick 和 quash,指令的意思:

pick:使用这个提交commit
reword:使用这个提交commit,并且编辑这个提交信息;
edit:选中,rebase时会暂停,允许你修改这个commit
squash:选中,会将当前commit与上一个commit合并
fixup:与squash相同,但不会保存当前commit的提交信息
exec:执行其他shell命令

在VI编辑里面,按I按键,进入编辑模式,把第一行指令改成pick,第二行执行改成改成 squash 或 s 后,按esc键后,退出编辑模式,然后按:wq保存并退出,然后会进入到编辑commit界面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中, 非注释部分就是两次的 commit message, 进入编辑模式后,编辑提交信息,退出编辑模式,然后按:wq保存并退出。再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、**注意事项:**如果这个过程中有操作错误,可以使用 git rebase --abort来撤销修改,回到没有开始操作合并之前的状态。

3. 修改最后一次commit注释

其commit提供了一个–amend参数,可以修改最后一次提交的信息:

git commit --amend

这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。

git commit --amend 详细教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 代码回滚到以前的版本

改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚。改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚。回滚分两种情况:

4.1 代码还没有push到远程仓库

当代码还在本地仓库,在commit后发现代码有问题,则可进行如下操作:

1、保证git工作区域是干净的,如果有改动,可以暂存代码:

~ git diff > tmp.patch # 代码改动存放到一个文件中
~ git checkout . # 取消所有改动
# 代码回退后可使用如下命令来 恢复改动
~ git apply tmp.patch # 把改动还原回来

2、代码回退到特定的commit:

~ git reset --hard 9e53f30b7ab56eHEAD is now at 9e53f30 开始页面:添加提交按钮。

此时所有历史commit记录可使用git reflog来查找:

~ git reflog26c5d5a (HEAD -> test, origin/test) HEAD@{0}: reset: moving to 26c5d5a
9e53f30 HEAD@{1}: reset: moving to 9e53f30b7ab56e
26c5d5a (HEAD -> test, origin/test) HEAD@{2}: commit: 添加测试包
9e53f30 HEAD@{3}: commit: 提交信息

如果回退错了,可使用上面命令找到commit的hash值,然后使用git reset --hard 9e53f30把之前的操作还原回来。

4.2 代码已经push到远程仓库

4.2.1 代码刚push,还没有扩散

代码刚push,还没有被其他开发人员拉取,或者还没有用于自动部署工具拉取(如Jenkins)。

此时使用git reset 回退后,然后使用git push -f 来强推代码到仓库即可:

~ git reset --hard 9e53f30b7
HEAD is now at 9e53f30 开始页面:添加提交按钮。~ git push -f

注意,如果推送的分支是保护分支(gitlab仓库有保护分支设置),那么只能是master权限才能强推代码,或暂时把保护分支关闭才能正确推送代码。

1、如果别的开发人员拉取的回退之前的代码,但是没有在此基础上编辑代码。那么可以使用git pull origin -f强制拉取服务器代码,覆盖掉本地代码。或者删除本地分支从新拉取这个分支代码。

2、如果是Jenkins构建中拉取过代码,在有权限编辑Jenkins部署命令的情况下,则可在Jenkins配置里面的脚本里面使用如下命令,删除问题分支,然后从新拉取分支:

git checkout master && git branch -d $branch
git fetch -a && git checkout $branch && git pull

$branch是Jenkins里面的分支名字变量。

也可以修改Jenkins配置,在构建环境选项下面,把Delete workspace before build starts选线勾选上(在构建前删除工作空间)。然后部署即可,构建成功后在修改配置,把这个选项取消。

4.2.2 代码已经被其他开发拉取或已经被自动部署工具拉取了

由于此时代码已扩散了,如果在使用reset回退然后强推则会导致被人在拉取你代码的时候导致冲突,拉取失败。

此时可以使用git revert取消特定commit的提交,并且会产生一个新的commit。然后就可以正常推送一个代码了。

假如仓库中有3个commit,一个commit添加了一个文件:

~ git logcommit 254524b47dfb86e7e4df5ee9e7a51fd9a7e9a93f (HEAD -> master)3.txt文件添加
commit d1e81adc50f2a965e17b524fd93ac222032817d4 # 这个commit要取消2.txt文件添加
commit 6b33993a3ab461ba73fab265d8d5f4c8dd4980781.txt文件添加

如果要把d1e81adc50f2a的commit的提交取消:

~ git revert d1e81adc50f2

上面的命令在终端执行后,会跳转到VI编辑commit提交信息中,写好回退说明后,保存退出VI编辑。终端使用git log命令就会看到这次回退记录:

commit 3806cbee824f86bde4101739b8179211a674e640 (HEAD -> master)Revert "2.txt文件添加"This reverts commit d1e81adc50f2a965e17b524fd93ac222032817d4.
....其他记录略。。。。

还可以一起连续回退几个连续的commit,比如上面的2个commit都回退可使用如下命令:

~ git revert d1e81adc5^..254524b4  # 注意^和..符号,重要[master ffe7792] Revert "3.txt文件添加"1 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 3.txt
[master 993a1ac] Revert "2.txt文件添加"1 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 2.txt

注意:旧的commit在前面,新的commit在后面,中间用..连接,在第一个commit后面放一个^表示这个commit也取消,如果没有^表示当前commit不取消。

在执行命令后,会连续进入几个VI编辑commit信息中,取消几个commit,就会添加几次新commit,其实这个连续revert命令跟一个一个的取消是一样的,

其他参考资料:https://blog.csdn.net/yxlshk/article/details/79944535

6.查看两个分支某个文件的差异

1、查看两个分支某个文件的差异:

git diff branchOne branchTwo src/pages/index.js

1、查看两个分支详细差异:

git diff branchOne branchTwo

2、查看两个分支简单的diff结果,只查看修改的文件名、修改了多少内容

git diff branchOne branchTwo --stat

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

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

相关文章

Diffusers代码学习-LoRA训练

LoRA&#xff08;Low-Rank Adaptation of Large Language Models&#xff09;是一种流行的轻量级训练技术&#xff0c;它显著减少了可训练参数的数量。它的工作原理是在模型中插入少量的新权重&#xff0c;并且只训练这些权重。这使得使用LoRA进行训练的速度更快、内存高效&…

1790java网络学习平台Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java网络学习平台系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

HTML静态网页成品作业(HTML+CSS)——VIVO介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

[C][数据结构][时间空间复杂度]详细讲解

目录 0.铺垫1.时间复杂度 -- 衡量算法的运行快慢1.是什么&#xff1f;2.大O的渐进表示法 2.空间复杂度 - 衡量算法所需要的额外空间3.常见复杂度对比 0.铺垫 时间是累计的空间是不累计的&#xff0c;可以重复利用 1.时间复杂度 – 衡量算法的运行快慢 1.是什么&#xff1f; …

大模型卷出新高度|暴雨AI服务器M8878助解算力之困

当今世界&#xff0c;作为新一轮科技革命和产业革命的重要驱动力&#xff0c;AI已经成为“兵家必争之地”。我国也在政府报告中首次将“人工智能”行动纳入国家战略&#xff0c;开启了以人工智能为核心的数字经济高质量发展的新时代。 当今世界&#xff0c;作为新一轮科技革命…

盘点:中国智能物流装备头部企业的“业务地盘”,谁还不为自己护食?

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 随着中国市场对智能物流装备需求的不断增长&#xff0c;各大物流装备企业纷纷加大投入&#xff0c;拓展业务&#xff0c;形成各自的重点业务行业。以下是几家主要企业在智能物流装备领…

AI 正在攻克难题——赋予计算机嗅觉

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

VUE3 学习笔记(13):VUE3 下的Element-Plus基本使用

UI是页面的门面&#xff0c;一个好的UI自然令人赏心悦目&#xff1b;国人团队开发的ElementUI在众多UI中较为常见&#xff0c;因此通过介绍它的使用让大家更好的了解第三方UI的使用。 安装 Npm install element-plus --save 或 Cnpm install element-plus --save 配置 全局配置…

Windows CMD对MySQL进行基本操作的常用命令

目录 前言1. 数据库操作2. 表操作3. 记录操作4. 备份与恢复数据库 前言 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增删改常用语法语句&#xff08;全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;命令行登录Mysql的详细讲解 启动MySQL服务&#xff1…

Binary Ninja 4.0.5336 (macOS, Linux, Windows) - 逆向平台

Binary Ninja 4.0.5336 (macOS, Linux, Windows) - 逆向平台 请访问原文链接&#xff1a;https://sysin.org/blog/binary-ninja/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Binary Ninja A New Type of Reversing Platfo…

机器学习算法 —— 逻辑回归

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 逻辑回归逻辑回归的介绍逻辑回归的优点逻辑回归的缺点逻辑回归的应用 实践演示库函数导入模型训练模型参数查看数据和模型可视化模型预测 …

11_JavaWeb监听器

文章目录 监听器1.监听器的分类2.application域监听器案例 监听器 概念&#xff1a;后端要发生一些事情的时候&#xff0c;自动触发一些代码的执行&#xff1b; 1.监听器的分类 web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类 按监听的…

下载ubuntu22.04

建议使用&#xff1a;清华源镜像 官网下载比较慢Ubuntu 22.04.4 LTS (Jammy Jellyfish) 打开清华源向下翻 然后找到22.04 下载完成&#xff1a;

C++的线性回归模型

线性回归模型是数理统计中的一种回归分析方法&#xff0c;其核心思想是通过建立一个线性方程来描述因变量与自变量之间的关系。这种关系可以表示为y wx e&#xff0c;其中y是因变量&#xff0c;x是自变量&#xff0c;w是回归系数向量&#xff0c;e是误差项&#xff0c;服从均…

28份 | FCIS 2023网络安全创新大会(公开)PPT分享

1、AIGC安全审计框架初探 2、AI领航&#xff0c;提效网络安全运营新未来 3、AI时代大模型安全分析 4、AI在企业内部的机遇与挑战 5、从0开始设计webshell管理工具 6、从实战看红队进攻技巧 7、移动终端软件供应链安全治理探讨 8、大模型时代下蓝军攻防实践 9、多视角下…

如何微调出自己的大模型——LoRA原理解析

1、前言 上一篇文章&#xff0c;我们已经讲了隐扩散模型——Stable Diffusion生成大模型。这种大模型&#xff0c;参数量及其之大。你没有足够的算力资源&#xff0c;就只能够使用人家已经训练好的大模型。既然没有办法训练属于自己的模型&#xff0c;那我们就想&#xff0c;是…

RocketMQ教程(一):RocketMQ的基本概念

RocketMQ是什么&#xff1f; RocketMQ 是一个分布式消息中间件和流计算平台&#xff0c;由阿里巴巴团队开源并贡献给 Apache 软件基金会&#xff0c;现为 Apache 顶级项目。它主要用于处理大规模数据的传输问题&#xff0c;支持高吞吐量、高可用性和可扩展性的消息发布和订阅服…

Kotlin 抽象类

文章目录 定义构造函数普通成员&#xff08;属性或方法&#xff09;抽象成员&#xff08;属性或方法&#xff09;实例化抽象类使用伴生对象继承抽象类 定义 在 Kotlin 中&#xff0c;抽象类使用abstract class定义&#xff1a; abstract class 类名 { 属性/方法 }我们可以尝试…

React - 实现走马灯组件

一、实现效果 二、源码分析 import {useRef, useState} from "react";export const Carousel () > {const images [{id: 3, url: https://sslstage3.sephorastatic.cn/products/2/4/6/8/1/6/1_n_new03504_100x100.jpg}, {id: 1, url: https://sslstage2.sephor…

RabbitMQ docker安装及使用

1. docker安装RabbitMQ docker下载及配置环境 docker pull rabbitmq:management # 创建用于挂载的目录 mkdir -p /home/docker/rabbitmq/{data,conf,log} # 创建完成之后要对所创建文件授权权限&#xff0c;都设置成777 否则在启动容器的时候容易失败 chmod -R 777 /home/doc…