5

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

 8 months ago
source link: https://www.cnblogs.com/iovec/p/git.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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

查看 git log 统计信息 📊

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

git shortlog -sn
882926-20231227160539143-1966697171.png

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

自定义 git log 输出样式 💄

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

882926-20231227160539228-1998547373.png

而且家人们谁懂啊,它这个日期格式把我看裂开了呀 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,简直不要太清爽~

882926-20231227160539235-1417605774.png

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

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

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

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

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

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

882926-20231227160539144-1926213430.png

千万别 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 这行代码谁写的。

882926-20231227160539244-681128418.png

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

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

882926-20231227160539256-34403091.png

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

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哥<[email protected]>,但公司内的项目用 姓名<公司@邮箱.com> 会比较好一点。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK