我在工作中使用 git 的几个技巧

sxkk20081年前知识分享101

前言

Git 是每个程序员的必备技能,良好的 Git 提交习惯,不但可以让代码阅读更清晰,还可以提高我们的我们的工作效率,接下来我将分享我在工作中关于 Git 的使用经验,或许对你有帮助。

Git 工作流

  • 主分支: master
  • 开发分支: develop
  • 提测分支: relase 如:relase/V2.0.0

新功能开发,develop 分支检出一个 feature 分支开发(合并后可删除) bug 修复,develop 分支检出一个 hotfix 分支开发(合并后可删除)

提测从 develop 检出一个 relase 分支提测,发布后 relase 分支合并到 master

若前端项目只有一个人负责,可以直接在 develop 开发,使用 Git 工作流规范,可以推进持续集成的统一建设,不会影响产品的持续发布

详情参考 阮一峰 Git 工作流

使用 oh-my-zsh 简化 git 命令

常规提交 git 命令

  • git add .
  • git commit -m 'fix: some fix'
  • git push

使用 oh-my-zsh 插件后

  • gaa
  • gcm "fix:some fix"
  • gp

安装 oh-my-zsh 后默认会打开 git 插件,它会在命令行下光标前显示当前分支名称,还可以实现自动补全,输入 git re 按 tab 会自提示可以选择命令,再按 tab 就可以选择命令,方便命令输入。

这里罗列几个常用的作为示例,展示它们的作用:

快捷键git 命令描述
ggitgit
gpgit push推送
glgit pull拉取
gaagit add --all添加当前项目所有文件修改、增删的文件到缓存区
gc!git commit -v --amend修正上次提交
gcmgit commit -m提交项目到本地库,其中-a表示不用再次输入git add命令
gcbgit checkout -b将特定分支上暂存储区的内容替换当下工作区的内容,
gcmgit checkout $(git_main_branch)切到 main 或者 master
gcdgit checkout $(git_develop_branch)切到 develop
gbDgit branch -D删除分支
glodsgit log --graph --date=short查看提交记录
gmgit merge合并分支
grbgit rebase变基
grhhgit reset --hard重置
gcpgit cherry-pick 从其他分支 选取一次提交
gstagit stash push保存修改为暂存
gstpgit stash pop弹出暂存

完整的简写对照表可以参考github

cherry-pick 代码迁移

工作中有时候会有一些定制功能,会遇到代码迁移的需求,代码在 2 条分支线上,往往不能合并,我们可以按以下 2 步快速迁移。

glods 可以查看提交记录

glods --grep 关键词 搜索提交记录,复制 commit id 后,执行git cherry-pick 可以非常方便地帮助我们实现代码迁移,但是前提是 commit 提交清晰,功能明确。

git cherry-pick 与 git merge 不同的是:

  • cherry-pick 可以迁移单个 commit 迁移,会生成一个新的 commit id

  • merge 必须全部功能合并过去,但不会生成新的 commit id,而是 commit 指针指向新的分支

约定式提交规范

关于提交规范可以遵循《约定式提交规范》

约定式提交的好处:

  • 自动化生成 CHANGELOG。
  • 基于提交的类型,自动决定语义化的版本变更。
  • 向同事、公众与其他利益关系者传达变化的性质。
  • 让人们探索一个更加结构化的提交历史,以便降低对你的项目做出贡献的难度。

我们可以在全局安装 git-cz 这个包

npm i  git-cz@4.5.0 -g

安装后在任意项目中使用 git-cz 代替 git commit,就可以在命令行中进行选择,提交信息会带有 emoji 表情,比较美观。

git rebase 的使用

  1. 可以删除 git 自动生成的 merge commit,优化提交记录

当你执行 git push 的时候,发现远程仓库有修改,git 会提示你先执行 git pull,接着你执行 git pull ,git 会帮你自动合并生成一次提交

Merge branch 'master' of github.com:test/test

此时可以执行 git rebase 或者拉取的时候执行 git pull --rebase,这样我们的 commmit 提交时间就在一条时间线上,比较清晰。

  1. rebase 可以修改合并多个提交,修改提交记录等

一个功能可能需要开发几天,那么需要有好几个提交,为了方便代码迁移,我们可以使用 git rebase -i ,将多个 commit 合并成一个 commit。

在 vscode 中安装了 gitlens 插件就会有可视化的选择界面,如上图,我选择了 squash,中间的 commit 就合并到了上一次 commit 中,当然我们还可以选择 reword 修改 commit 信息,选择 drop 删除 commit 等。

合并的 git 记录是在本地的,需要强制推送到远程,执行gpf 也就是 git push --force

利用 Git reflog 找回丢失的记录

老司机可能警告过你,要避免使用git reset --hard。因为这是一种破坏性的操作。一旦执行,之前的修改全部丢失了,但有时候又避免不了使用 reset,在你执行 reset 之后,却发现,之前的某些提交还是有用的,想再看下之前的代码,这个时候可以使用 git reflog,reflog 中你可以看到所有的变化,我们可以根据 ,检出新分支查看,或者 cherry-pick 找回之前的提交。找回内容的前提是,你的内容做了 commit。若没有提交,git reset 后就丢了。

reflog 是一个本地结构,它记录了 HEAD 和分支引用在过去指向的位置。reflog 信息没法与其他任何人共享,每个人都是自己特有的 reflog。重要的一点是,它不是永久保存的,有一个可配置的过期时间,reflog 中过期的信息会被自动删除。

小结

  • 使用 Git 工作流规范,可以推进持续集成的统一建设,不会影响产品的持续发布
  • 使用 oh-my-zsh 可以简化 git 提交命令
  • 使用 git-cz 可以让我们遵循约定式提交规范
  • 使用 git cherry-pick 可以实现往不能合并的分支迁移代码
  • 使用 git rebase 可以优化提交记录,让提交都在一条时间线上。
  • 利用 git reflog 找回丢失的 commit 记录

以上就是本文全部内容,如果对你有帮助,可以随手点个赞,这对我真的很重要,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

本文正在参加「金石计划 . 瓜分 6 万现金大奖」

相关文章

最新dnf徽章冷知识(dnf徽章怎么用打哪个部位好)

本篇文章给大家谈谈水浒传单机游戏攻略大全,以及水浒传游戏单机版本对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。初恋:世界上最美丽的事情;暗恋:世界上最隐蔽的事情;热恋:世界是最糊涂的事情;痴恋...

AI语音技术的发展与应用

AI语音技术的发展与应用

  随着科技的发展,人工智能(AI)在各个领域都得到了广泛的应用,其中最受欢迎的便是语音技术。语音技术已经从仅仅是语音识别和合成,发展成为了一个能够帮助人们交流、控制家庭智能...

AI接口:推动科技创新与社会发展的引擎

AI接口:推动科技创新与社会发展的引擎

  随着人工智能(AI)技术的快速发展,AI接口成为连接人与机器之间的桥梁,推动科技创新与社会发展迈上新的高度。AI接口的出现不仅在各行业中发挥着重要作用,同时也对人们的生活...

AI识图技术的进步对社会的影响

AI识图技术的进步对社会的影响

  随着人工智能(AI)技术的迅猛发展,AI识图应用正逐渐渗透到我们的日常生活。AI识图作为其中的重要应用之一,正在改变着我们的工作方式、生活习惯以及社会结构。  AI识图是...

AI接口:未来科技的关键突破口

AI接口:未来科技的关键突破口

  随着科技的不断发展,人工智能(AI)作为当代最炙手可热的技术之一,已经在各个领域展现出了强大的潜力。而AI接口作为人工智能技术的核心,正成为驱动未来科技发展的关键突破口。...

在 2021 年 star 排行榜单中,tauri 一年增长了 18k 排名第五,我们就很好奇,Tauri 有什么优势呢?

然后我分别用 tauri 和 Electron.JS 打包测试一个 hello world 程序,一起来看下它们的大小。

大小对比

  • Electron.JS 62.5mb
  • Tauri 4.32mb

Tauri 构建的桌面程序太小了,远不是 Electron.JS 可以相比的,因为它放弃了体积巨大的  Chromium 内核   和  nodejs,前端使用操作系统的  webview,后端集成了  Rust。 Tauri 提供了初始化程序的模板,比如原生 js, react, svelte.js, vue.js 等等。

image.png

初步尝试 tauri,并且与 electron.js 对比

什么是 Tauri?Tauri 是一个为所有主流桌面平台构建小型、快速二进制文件的框架。开发人员可以集成任何编译成 HTML、 JS 和 CSS 的前端框架来构建他们的用户界面。应用程序的后端是一个...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。