在团队项目中,GitHub工作流的优化至关重要。通过更好的分支管理和协作流程,可以减少代码冲突,提高开发效率,确保项目的稳定性和可维护性。这篇文章将探讨如何有效运用这些方法,提升团队协作的质量。

本学习笔记源视频:

GitHub 工作流 —— B站 @码农高天

术语

  • Git: 一种非常常用的版本控制工具。
  • GitHub: 一个支持使用 Git 修改并存储文件的平台。
  • Remote: 远程仓库,通常指如 GitHub,Gitlab 或 Gitee 等平台。
  • Local: 在本文中指在本地存放的仓库,该仓库启用了 git 版本控制工具管理。
  • Disk: 在本文中指用编辑器打开磁盘中源文件的状态。
  • main(master): Git 主分支的默认名称,2021年前后主分支的默认名称由 master 更改为 main。
  • Pull Request: 在团队项目中向主分支或其他分支提出代码合并请求。
  • Squash and Merge: 将多个提交(commits)压缩为一个单一提交,然后合并到目标分支的操作。

复制阶段

将远程仓库复制到本地:

git clone https://github.com/example/example.git

0-git-clone

修改阶段

建立新分支:

git checkout -b my-feature

1-git-checkout.png

查看当前修改过的文件与 Git 中保存文件的区别:

git diff

2-git-diff.png

将修改的文件告知 Git(将文件添加到暂存区):

git add <changed_file>

3-git-add.png

将修改提交到 Git:

git commit

4-git-commit.png

推送阶段

将修改过的代码推送到 GitHub:

git push origin my-feature

5-git-push-origin.png

若此时 GitHub 上的主分支有其他新的提交记录,需要检查 my-feature 分支是否还可以继续推送。

需要先回到主分支:

git checkout main

6-git-checkout.png

同步 GitHub 中最新的主分支到 Local Git 仓库:

git pull origin main

7-git-pull.png

将分支切换到 my-feature 分支:

git checkout my-feature

8-git-checkout.png

同步主分支的变化:

这一步的目的是将当前分支的更改重新基于最新的 main 分支之上。具体操作中,Git 会取出当前分支与 main 分支的共同祖先提交之后的所有提交,将这些提交临时移出,然后将当前分支“移动”到 main 分支的最新状态,最后把刚才移出的提交应用到新的 main 分支之上。

这样做的结果是,当前分支的提交历史看起来像是基于最新的 main 分支,可以使代码历史更清晰。但要注意,在 rebase 过程中可能会遇到冲突,需要手动解决这些冲突才能完成 rebase。

git rebase main

9-git-rebase.png

将修改好的代码再次同步到 Remote:

因为我们上一步做了 git rebase,此时需要强制推送。

git push -f origin my-feature

10-git-pull.png

合并分支阶段

发送一个 Pull Request 请求:

11-pull-request.png

作者在审查完代码后,使用 Squash and merge 合并分支:

由于 feature 分支的提交记录一般都比较繁杂,使用 Squash and merge 可以将所有变动合并成一个提交记录,避免将其他繁杂的提交记录合并到主分支上。

12-squash-and-merge.png

删除多余分支

GitHub 上可以非常方便的删除不需要的分支,但我们还需要删除本地不需要的分支。

切换到主分支:

git checkout main

13-git-checkout.png

删除 my-feature 分支:

git branch -D my-feature

14-git-branch-delete.png

最后再从 Remote 同步一次,确保本地 Git 仓库与 GitHub 上一致:

git pull origin main

15-git-pull.png