👫有效的Git团队协作实践,拒当“分支恐怖分子”

1,295 阅读10分钟

👫使用Git的时候,不要让自己显得像个憨憨

嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️

Git 🌱 目前已经成为最热门的代码管理工具了,进而甚至衍生了如今特别成熟的代码管理平台 GithubGitlab 等等.

因此如果作为一个 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 等团队共同使用的分支

在团队协作中,为了便于独立工作并最大程度地减少对主要源代码的影响,团队通常会强制要求每个团队成员仅使用单独的分支进行开发. 🌿

使用单独的分支有很多好处,其中之一就是可以完全跟踪整个开发过程中所做的更改. 🔍📝只有在整个开发过程结束、代码编写完成并经过测试验收之后,才能将其合并到主分支(如 mastermain)中. 🚀

这样做能够确保主分支的安全性和可控性,避免了直接对主分支进行修改可能带来的风险. 🔒

所以,当你接到一个新的需求需要进行开发时,第一步就是从主分支创建一个新的分支. 🔀这样你就可以在自己的分支上安心地进行开发,不会对主分支造成任何干扰. 👨‍💻

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命令执行以下操作:

注意:这些命令应该根据你的具体分支名称进行相应的替换,以确保正确执行。

  1. git checkout <main branch>:此命令切换到指定的主分支(通常是master或main)。它会更新你的工作目录和Git索引,使其与主分支的内容保持一致. 🔀
  2. git pull:此命令从远程仓库拉取最新的更改。它会获取仓库的最新提交,并将其合并到当前分支中。这样可以将仓库的新提交合并到你的本地分支中. 🔄
  3. git checkout -:此命令切换回之前的分支(即你的开发分支). ⬅️
  4. git rebase <main branch>:此命令对当前分支进行变基操作,将其与指定的主分支进行合并。变基操作将把你的本地提交移动到主分支的最新提交之上. 🌱

🔀 在提交至仓库前,先合并自己的零碎提交

以下的操作一定只能在自己的分支上进行,请不要在其他分支操作,包括 master main relase test 等团队共同使用的分支

在开发过程中,经常会出现一些小的bug修复或者代码调整,导致产生多个提交。如果每个功能都有大量这样的小提交,那么主分支(例如master)的提交历史将会变得混乱且难以管理.

为了使自己的分支的提交历史更加简洁和清晰,我们可以使用合并提交的方式. 🔀 合并提交允许将多个连续的小提交合并为一个更有意义的提交,以便更好地追踪功能开发或bug修复的过程. 🚀

git rebase -i HEAD~20
git commit --amend
git push -f

这段代码使用了一些高级的Git命令,执行以下操作:

请确保在使用这些高级Git命令时要小心,理解其影响,并仔细考虑是否需要执行它们。如果您对其中的任何命令不熟悉或不确定,建议先查阅相关教程或向团队中的经验丰富的成员寻求帮助。

  1. git rebase -i HEAD~20:这个命令允许您在交互模式下查看最近的20个提交。您可以使用此命令合并、删除或编辑这些提交。⚠️请注意,这个操作需要在命令行中使用vim编辑器进行操作,如果您对vim不熟悉,可能需要进行一些相关学习
  2. git commit --amend:这个命令用于修改当前的提交。您可以使用它来添加、修改或删除提交的内容,也可以修改提交消息。
  3. 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>

🎉 希望本文能够带给你关于 git 在团队协作方面的一些启发。如果你有任何疑问或者想进一步讨论相关话题,请随时告诉我。🚀✨