前言
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 命令 | 描述 |
g | git | git |
gp | git push | 推送 |
gl | git pull | 拉取 |
gaa | git add --all | 添加当前项目所有文件修改、增删的文件到缓存区 |
gc! | git commit -v --amend | 修正上次提交 |
gcm | git commit -m | 提交项目到本地库,其中-a表示不用再次输入git add命令 |
gcb | git checkout -b | 将特定分支上暂存储区的内容替换当下工作区的内容, |
gcm | git checkout $(git_main_branch) | 切到 main 或者 master |
gcd | git checkout $(git_develop_branch) | 切到 develop |
gbD | git branch -D | 删除分支 |
glods | git log --graph --date=short | 查看提交记录 |
gm | git merge | 合并分支 |
grb | git rebase | 变基 |
grhh | git reset --hard | 重置 |
gcp | git cherry-pick <commitId> | 从其他分支 选取一次提交 |
gsta | git stash push | 保存修改为暂存 |
gstp | git stash pop | 弹出暂存 |
完整的简写对照表可以参考github
cherry-pick 代码迁移
工作中有时候会有一些定制功能,会遇到代码迁移的需求,代码在 2 条分支线上,往往不能合并,我们可以按以下 2 步快速迁移。
glods 可以查看提交记录
glods --grep 关键词 搜索提交记录,复制 commit id 后,执行git cherry-pick <commit id> 可以非常方便地帮助我们实现代码迁移,但是前提是 commit 提交清晰,功能明确。
git cherry-pick 与 git merge 不同的是:
- cherry-pick 可以迁移单个 commit 迁移,会生成一个新的 commit id
- merge 必须全部功能合并过去,但不会生成新的 commit id,而是commit指针指向新的分支
约定式提交规范
关于提交规范可以遵循《约定式提交规范》
约定式提交的好处:
- 自动化生成 CHANGELOG。
- 基于提交的类型,自动决定语义化的版本变更。
- 向同事、公众与其他利益关系者传达变化的性质。
- 让人们探索一个更加结构化的提交历史,以便降低对你的项目做出贡献的难度。
我们可以在全局安装 git-cz 这个包
npm i [email protected] -g
复制代码
安装后在任意项目中使用 git-cz 代替 git commit,就可以在命令行中进行选择,提交信息会带有 emoji 表情,比较美观。
git rebase 的使用
- 可以删除 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 提交时间就在一条时间线上,比较清晰。
- rebase 可以修改合并多个提交,修改提交记录等
一个功能可能需要开发几天,那么需要有好几个提交,为了方便代码迁移,我们可以使用 git rebase -i <commit id>,将多个 commit 合并成一个 commit。
在 vscode 中安装了 gitlens 插件就会有可视化的选择界面,如上图,我选择了 squash,中间的 commit 就合并到了上一次 commit 中,当然我们还可以选择 reword 修改 commit 信息,选择 drop 删除 commit 等。
合并的 git 记录是在本地的,需要强制推送到远程,执行gpf 也就是 git push --force
利用 Git reflog 找回丢失的记录
老司机可能警告过你,要避免使用git reset <commit id> --hard。因为这是一种破坏性的操作。一旦执行,之前的修改全部丢失了,但有时候又避免不了使用 reset,在你执行 reset 之后,却发现,之前的某些提交还是有用的,想再看下之前的代码,这个时候可以使用 git reflog,reflog 中你可以看到所有的变化,我们可以根据 <commit id>,检出新分支查看,或者 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 记录
以上就是本文全部内容,如果对你有帮助,可以随手点个赞,这对我真的很重要,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端
转载连接:https://juejin.cn/post/7169064565399896078