大家好,我是 dom 哥。今天给大家分享几个 git 的高级应用。

git 是目前最流行的版本控制工具。git 玩的 6 不 6,轻则影响自己的开发幸福指数 ,重则影响下班时间 。本文介绍一些日常开发中常遇到的场景以及相关的 git 命令。

接下来就以前端流行的 mvvm 框架 vue 项目为例进行演示 。

查看 git log 统计信息

谁才是真正的卷王?这个命令给你答案!

git shortlog -sn

左侧是 commit 数量,右侧是提交者 name

自定义 git log 输出样式

这是素颜的 git log 样子。一个 commit 独占 7 行,一页也展示不了几个 commit 啊~

而且家人们谁懂啊,它这个日期格式把我看裂开了呀 Tue Dec 26 11:57:50 2023 +0800

先把日期格式调整的舒服一些:

git config --global log.date format:"%Y-%m-%d %X"

设置完之后日期格式是这样纸滴 2023-12-26 11:57:50

再来一串魔法设置 git log 输出的信息格式:

git config --global format.pretty "%C(auto)%h %s %C(italic dim white)%cn<%ce>[%cd]%Creset%C(auto)%d%Creset%n"

这是化妆后 git log 的样子。一行一个 commit,简直不要太清爽~

偷偷撤销提交记录的某次 commit

常在河边走,哪有不湿鞋。谁还没有提交过一个不该提交的 commit 呢,还 push 到远端了,怎么办?怎么办?

git reset ?这会把某个 commit 之后的提交全干掉啊,不行,不行

用下面这个命令,就可以悄无声息的把某个 commit 摘掉了

git rebase -i --onto commit-ish^ commit-ish

但事情没那么简单。此时只是本地的提交记录被纠正了,远端的还没改变呢。你需要 git push!然而在 rebase 之后 git push,一定会被 reject,会报类似下面的错误信息

千万别 git pull 哦!!!因为此时当前分支的本地和远端已经产生了分歧,接下来就是决定谁覆盖谁的时刻。

如果 git pull,那就是远端覆盖本地,上面的 rebase 操作白干!

如果想本地覆盖远端,只能 git push --force,加上 --force 强推到远端!推上去远端提交记录就和本地一样啦。

但是,实际操作起来肯定不会很顺利,可能有一长串的 commit 需要确认,可能会出现大量的冲突文件,可能需要其他协作者删掉本地的分支重新迁出。

删除远程分支

删除有风险,操作需谨慎。千万别手抖!

git push -d origin <branch>

批量删除本地分支和远端分支

git branch | grep 'dombro_' | xargs git push -d origin
git branch | grep 'dombro_' | xargs git branch -d

当前分支名称

git rev-parse --abbrev-ref HEAD

这通常在 shell 脚本里会用到!

清理已删除的本地远程引用 ️

git fetch -p

为什么要清理?我也不晓得

查看一个文件都哪些人编辑过

git log --pretty=format:"%an" <file> | sort -u

为什么要看这个,就是想看看

查看某个文件每一行都是谁写的

git blame --date=format:"[%Y-%m-%d %X]" <file>

这个太重要啦,bug来了想把锅甩出去,得第一时间找到 TMD 这行代码谁写的。

但,正经人谁在命令行里看 blame 啊,这里就不得不推荐一个 vscode 插件 GitLens:

有了它,在 vscode 里 blame 简直不要太方便,再也不用愁找这行代码到底谁写的啦

某个文件冲突太多,想直接用线上的

git pull # 先拉最新的代码
git checkout origin/master -- <file>

话说你用的 git 冲突解决工具是什么?我先说 ‍♂️,webstorm 自带的 git 工具,比 vscode 的好用多了。

什么!把 .vscode,.idea,.DS_Store 推送上去了!

git rm --cached -r .vscode/ .idea/ .DS_Store/

别忘了 remove 完之后 commit 哦~

给当前项目单独设置 user name 和 email

git config user.name <name>
git config user.email <email>

可能我想在 github 上的项目的提交者信息是 DOM哥<dombro@qq.com>,但公司内的项目用 姓名<公司@邮箱.com> 会比较好一点。

git config 设置完之后信息会存在项目根目录 .git/config 中,跟随项目。实现不同项目的提交者信息各不相同 。

这些 git 高级命令你知道几个的更多相关文章

  1. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  2. 你需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  3. 你需要知道的12个Git高级命令【转】

    转自:http://www.linuxidc.com/Linux/2016-01/128024.htm 众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git, ...

  4. 几个常用的 Git 高级命令

    Git 是一款开源优秀的版本管理工具,它最初由 Linus Torvalds 等人开发,用于管理 Linux Kernel 的版本研发.相关的书籍和教程网上琳琅满目,它们多数都详细的介绍其基本的使用和 ...

  5. git 高级命令

    git bisect 运行git bisect 通常是为了找出某个导致版本库产生倒退或bug的特殊提交 例如:你的版本库已经从一个已知的"好"状态过渡到一个已知的"坏&q ...

  6. [翻译] 10 个实用的 Git 高级命令

    1. 输出最后一次提交的改变 这个命令,我经常使用它 来发送其他没有使用 git 的人来检查或者集成所修改的.它会输出最近提交的修改内容到一个 zip 文件中. git archive -o ../u ...

  7. git高级命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  8. git常用命令/git 部分高级命令备忘录

    常用命令 克隆 - git clone  git@gitee.com:niunafei1/git_learning.git git 创建分支 - git checkout -b dev git 切换分 ...

  9. Git版本控制:Git高级教程

    http://blog.csdn.net/pipisorry/article/details/50669350 Git有很多命令行参数,使用起来非常方便.可以运行 man git log ,来看一下这 ...

  10. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别

    Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...

随机推荐

  1. Verilog实现定点乘法器

    实验目的 理解定点乘法的不同实现算法的原理,掌握基本实现算法. 熟悉并运用 Verilog 语言进行电路设计. 为后续设计 CPU 的实验打下基础. 实验内容 定点乘法器有多种实现,实验要求实现迭代乘 ...

  2. GIS中的ROI文件可否由.xml格式转为.roi格式?

      本文介绍在ENVI软件中,将用户自行绘制的.xml格式的感兴趣区(ROI)文件转换为.roi格式的方法.   对于ENVI软件,其在早期版本中,默认将用户所绘制的感兴趣区文件保存为.roi格式:而 ...

  3. vue2和vue3使用echarts时无数据,怎么显示暂无数据图片或文字

    一开始也经历了用v-if和v-show,v-show的话echarts还会留出暂无数据图片的位置,导致echarts变形,v-if在加载和不加载切换时,dom会获取不到:后来也是在网上找的方法,时间有 ...

  4. 【RocketMQ】消息的消费总结

    消费者从Broker拉取到消息之后,会将消息提交到线程池中进行消费,RocketMQ消息消费是批量进行的,如果一批消息的个数小于预先设置的批量消费大小,直接构建消费请求ConsumeRequest将消 ...

  5. Goobye, cnblogs

    转 typecho 了,个人网站的客制化程度当然不是 cnblogs 能比得上的. <cirnovsky.cf>

  6. 多租户基于Springboot+MybatisPlus实现使用一个数据库一个表 使用字段进行数据隔离

    多租户实现方式 多租户在数据存储上主要存在三种方案,分别是: 1. 独立数据库 即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高. 优点:为不同的租户提供独立的数据库,有助 ...

  7. c++枚举详细介绍以及具体用法

    C++ 中的枚举(Enumeration)是一种用于定义命名常量集合的数据类型.枚举可以提高代码的可读性和可维护性,让您可以使用有意义的名称来表示特定的取值,而不必使用原始的数字常量. 枚举的基本语法 ...

  8. destoon上做纯js实现html指定页面导出word

    因为最近做了范文网站需要,所以要下载为word文档,如果php进行处理,很吃后台服务器,所以想用前端进行实现.查询github发现,确实有这方面的插件. js导出word文档所需要的两个插件: 1 2 ...

  9. 使用 QuickTime Player 将手机投屏到旧版 Macbook pro

    由于旧版的 MacBook Pro 不支持 AirPlay,我们可以通过Mac系统自带的应用程序[QuickTime Player]来进行投屏操作. 以下是具体的步骤: 首先,使用USB数据线将你的 ...

  10. 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻译为PCL语言的步骤

    前面这些都是问题描述,问题在偏下面 场景:用户电脑上安装了PCL驱动,可通过驱动完成打印. 需求:现在需要提供一种脱离PC端完成文件上传并打印的功能.让用户使用手机或pc未安装驱动时都能打印文件. 目 ...