这些 git 高级命令你知道几个

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

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

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

查看 git log 统计信息 📊

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

sh 复制代码
git shortlog -sn

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

自定义 git log 输出样式 💄

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

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

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

sh 复制代码
git config --global log.date format:"%Y-%m-%d %X"

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

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

sh 复制代码
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 摘掉了👇🏻

sh 复制代码
git rebase -i --onto commit-ish^ commit-ish

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

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

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

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

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

删除远程分支 💢

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

sh 复制代码
git push -d origin <branch>

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

sh 复制代码
git branch | grep 'dombro_' | xargs git push -d origin
git branch | grep 'dombro_' | xargs git branch -d

当前分支名称 🎯

sh 复制代码
git rev-parse --abbrev-ref HEAD

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

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

sh 复制代码
git fetch -p

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

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

sh 复制代码
git log --pretty=format:"%an" <file> | sort -u

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

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

sh 复制代码
git blame --date=format:"[%Y-%m-%d %X]" <file>

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

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

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

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

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

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

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

sh 复制代码
git rm --cached -r .vscode/ .idea/ .DS_Store/

别忘了 remove 完之后 commit 哦~

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

sh 复制代码
git config user.name <name>
git config user.email <email>

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

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

相关推荐
武超杰4 小时前
Git 从入门到精通教程
git
程序员夏末5 小时前
【开源经历 | 第一篇】参与开源需要掌握的Git和Github指令
git·开源
SNOWPIAOP6 小时前
git status 出现中文乱码的解决方案等
git·乱码·postgres
qq_4352879217 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
AIMath~1 天前
Git 子模块(Submodule)目录结构清除实战复盘
git
切糕师学AI1 天前
Ubuntu 下 Git 完全使用指南
linux·git·ubuntu
一袋米扛几楼981 天前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue
尘埃落定wf1 天前
# GitHub CLI:告别繁琐的 Git 命令,让开发更高效
git·github
恋喵大鲤鱼1 天前
git clone
git·git clone
金牛IT1 天前
Gogs 轻量级 Git 服务器搭建与使用
运维·服务器·git