Git 🌱 目前已经成为最热门的代码管理工具了,进而甚至衍生了如今特别成熟的代码管理平台
Github
,Gitlab
等等.
因此如果作为一个 Coder
,如果经常在协作中出现 Git
操作不熟练甚至搞出些幺蛾子来,那可就一点都 不酷~ 😎
因此,在大环境的驱使下,如何在团队协作中进行 Git
最佳实践,对每一个项目的顺利进行都至关重要(尽管可能很多小公司并不重视这类代码管理,甚至在用文件光盘传代码哈哈哈).
在这个背景下,我将向你介绍在团队 👫 中应用最为广泛的 Git
最佳实践,你可以在即将开始的项目中关注到这些 Tips
. 😉
🔧 一切的前提:配置自己的git提交身份
在使用 Git
时,一定要正确地设置你的姓名和电子邮件地址。这样,每次你提交代码的时候,这些信息就会附加在提交记录中. 📝
**😅 我会告诉你,就算是2023年,依然有团队成员会忘记配置这个导致了项目代码上存在“YourName”这个人的更改!谁是“YourName”!?**作为一名Coder
,千万别成为那个“YourName”🙈
记得在使用 Git
之前,正确地配置你的姓名和电子邮件地址,这样可以确保你的更改能够被正确地归属和联系到你。这是维护良好的团队合作和代码管理的最最最最最基本实践。👍
git config --global user.name "YourName"
git config --global user.email "YourName@mail.com"
🚫 不要直接往公共分支中推送代码
包括 master
main
relase
test
等团队共同使用的分支
在团队协作中,为了便于独立工作并最大程度地减少对主要源代码的影响,团队通常会强制要求每个团队成员仅使用单独的分支进行开发. 🌿
使用单独的分支有很多好处,其中之一就是可以完全跟踪整个开发过程中所做的更改. 🔍📝只有在整个开发过程结束、代码编写完成并经过测试验收之后,才能将其合并到主分支(如 master
或 main
)中. 🚀
这样做能够确保主分支的安全性和可控性,避免了直接对主分支进行修改可能带来的风险. 🔒
所以,当你接到一个新的需求需要进行开发时,第一步就是从主分支创建一个新的分支. 🔀这样你就可以在自己的分支上安心地进行开发,不会对主分支造成任何干扰. 👨💻
git checkout master
git checkout -b <开发分支名>
当然,在创建新分支时,确保遵守团队的命名规范和最佳实践. 📌 分支名称应该简明扼要,清晰表达分支的用途或关联的任务.
一般团队中都会有一些约定俗成的命名前缀,如 feature/
表示新功能开发, bugfix/
表示修复bug, hotfix/"
表示紧急修复等等. 🛠️ 这样可以更好地组织和分类分支,方便团队成员之间的协作和代码管理. 💡
git branch <<类型>/<功能描述>_<姓名>_<年月日>>
# 举个例子, 请以自己的团队规范为主
# git branch feature/add_post_message_wangjj_20230602
以下内容参考致 《Angular提交规范》
在日常使用 Git
中,你可能最常用的四个类型是:
类型 | 描述 |
---|---|
feature | 新增功能,迭代项目需求 |
bugfix | 修复缺陷,修复上一版本存在问题 |
hotfix | 用于使用临时解决方案和/或不遵循常规过程(通常是因为紧急情况)更改代码 |
test | 用于添加缺失的测试用例或更正现有的测试用例 |
当然,你还能有更多的选择,但是这不是我们常用的类型。下面是另外几个常见的可能会用到的类型:
类型 | 描述 |
---|---|
build | 影响构建系统或外部依赖项的更改 |
ci | 对我们的CI配置文件和脚本的更改 |
docs | 更新文档,仅修改文档不修改代码 |
perf | 代码优化,提高性能 |
refactor | 重构(既不修复bug也不增加新功能的代码更改) |
style | 不会影响代码含义的更改(空格,格式,缺少分号等) |
chore | 变动事务,改动其他不影响代码的事务 |
revert | 回滚版本,撤销某次代码提交 |
merge | 合并分支,合并分支代码到其他分支 |
sync | 同步分支,同步分支代码到其他分支 |
impr | 改进功能,升级当前功能模块 |
✍️ 确保每个 commit 都能编写一目了然的提交信息
编写清晰有意义的提交消息对于团队代码管理非常重要. 📝因此,我们需要为制作简洁、详细和有目的的提交消息分配足够的时间,这样我们个人就能表现得更专业,并对团队负责. 💼
在编写提交消息时,我们可以遵循以下规则:
- 以动词开头,以明确指出所做的操作,例如 “修复”、”添加”、”更新” 等. 🛠️
- 结尾不需要加句号. ⚡️
这些简洁、清晰且有意义的提交消息,可以极大提高团队的代码管理效率. 😊✍️
例如:
feat(View): 新增主题皮肤切换按钮
feat(View): 新增主题皮肤切换按钮
1. 更改了皮肤按钮样式
2. 优化了组件库
3. 修复滑动不生效bug
🔄 定期更新主分支代码到自己的开发分支
为了避免代码错误、减少无谓的重复劳动和解决代码冲突(这些工作都是非常费时费力的),一定一定一定要定期更新自己的开发分支. 🔄
以下是一套更新的完整操作,可以帮助你完成这部分工作:
git checkout <主分支(一般为master 或 main)>
git pull
git checkout -
git rebase <主分支(一般为master 或 main)>
这段代码使用Git命令执行以下操作:
注意:这些命令应该根据你的具体分支名称进行相应的替换,以确保正确执行。
git checkout <main branch>
:此命令切换到指定的主分支(通常是master或main)。它会更新你的工作目录和Git索引,使其与主分支的内容保持一致. 🔀git pull
:此命令从远程仓库拉取最新的更改。它会获取仓库的最新提交,并将其合并到当前分支中。这样可以将仓库的新提交合并到你的本地分支中. 🔄git checkout -
:此命令切换回之前的分支(即你的开发分支). ⬅️git rebase <main branch>
:此命令对当前分支进行变基操作,将其与指定的主分支进行合并。变基操作将把你的本地提交移动到主分支的最新提交之上. 🌱
🔀 在提交至仓库前,先合并自己的零碎提交
以下的操作一定只能在自己的分支上进行,请不要在其他分支操作,包括 master
main
relase
test
等团队共同使用的分支
在开发过程中,经常会出现一些小的bug修复或者代码调整,导致产生多个提交。如果每个功能都有大量这样的小提交,那么主分支(例如master)的提交历史将会变得混乱且难以管理.
为了使自己的分支的提交历史更加简洁和清晰,我们可以使用合并提交的方式. 🔀 合并提交允许将多个连续的小提交合并为一个更有意义的提交,以便更好地追踪功能开发或bug修复的过程. 🚀
git rebase -i HEAD~20
git commit --amend
git push -f
这段代码使用了一些高级的Git命令,执行以下操作:
请确保在使用这些高级Git命令时要小心,理解其影响,并仔细考虑是否需要执行它们。如果您对其中的任何命令不熟悉或不确定,建议先查阅相关教程或向团队中的经验丰富的成员寻求帮助。
git rebase -i HEAD~20
:这个命令允许您在交互模式下查看最近的20个提交。您可以使用此命令合并、删除或编辑这些提交。⚠️请注意,这个操作需要在命令行中使用vim编辑器进行操作,如果您对vim不熟悉,可能需要进行一些相关学习。git commit --amend
:这个命令用于修改当前的提交。您可以使用它来添加、修改或删除提交的内容,也可以修改提交消息。git push -f
:这个命令用于强制推送更改到远程仓库。使用-f
标志是为了强制覆盖远程仓库上的提交历史。⚠️请注意,强制推送可能会丢失以前的提交历史。因此,仅在您清楚自己的操作将带来什么后果,并且仅在自己的开发分支上使用该命令。
👀 重视代码 Review,这是我们每个人快速提升的最佳捷径
想要自己的代码超级牛逼超级厉害,你不能一个人冥思苦想和闭关修炼!
你得让大家都来看看你的代码是怎么写的,怎么实现!
把自己的代码交给团队其他人进行代码审查,是最有效的解决问题的手段. 🕵️♂️ 还有,这是提升个人能力最快的捷径! 🚀
让团队的每个人参与到自己的代码 Review
至关重要,因为你可能对代码库中某些领域的知识不是很了解,其他小伙伴通过审查就能迅速发现问题,并给你提供超赞的解决方案! 💡
这个过程中,还会有很多看不见的知识传播,比看道长王jj
写辣鸡文章都要更直接、有用! 🎓📚
📚 你可能会需要的 Git 场景
克隆仓库
git clone <仓库地址>
提交代码
git add .
git commit -m "feat(View): 新增主题皮肤切换按钮"
git push
同事创建了一个分支并推送,但是无法在本地看到怎么办
git fetch
git checkout <同事的分支名>
我做了一些更改,但是我暂时不想提交,先把他存起来
git stash # 将当前的更改存储到暂存区
git stash apply # 如果你现在突然想应用原来存的东西,这个命令可以还原你存储的所有更改
git stash apply stash@{1} # 如果你存了很多,这个可以帮你应用第1个存储记录
我以前存了一些更改,但是我忘记改了什么,我怎么样才能在不应用的情况下查看
git stash show # 显示最近存储的更改所涉及的文件列表
git stash show -p # 显示文件中的更改内容
我想复制另一个分支的提交记录到我当前分支
git cherry-pick <commit_id>