date
Apr 8, 2023 12:40 AM
type
status
slug
summary
tags
category
updated
Nov 15, 2024 03:12 AM
icon
password
摘要
在日常工作和学习中,会遇到多人开发项目。项目的合并往往是一个大问题。在多人开发中采用 Git 管理代码,如果没有一个良好的 Git 工作流程,项目维护起来将变得极其困难。恰巧之前看到一位大佬的视频,介绍了一套 Git 上多人开发的工作流程。结合自己的实际工作环境,我做了一些总结。
操作流程
- git clone// 克隆到本地
- git checkout -b xxx切换至新分支(相当于复制了远程仓库到本地并创建 xxx 分支)
- 修改或添加本地代码(对硬盘上的源文件进行修改)
- git diff查看自己对代码做出的改变
- git add .将更新后的代码上传至暂存区
- git commit -m "xxxxx"将暂存区中的更新提交至本地 Git
- git push origin xxx将本地的 xxx 分支推送至 GitHub 上的 Git
如果在编写代码过程中发现远端代码已更新
- git add .和- git commit -m ""先保存本地代码,进行一次本地提交,不做线上提交
- git checkout master切换回 master 分支
- git pull origin master将远端修改过的代码更新到本地
- git checkout xxx回到 xxx 分支
- git rebase master在 xxx 分支上将 master 分支内容移过来,根据自己的 commit 进行合并(可能会出现 rebase conflict,需要手动选择保留的代码)
- 如果合并有问题并想放弃合并,可以使用 git rebase --abort丢弃合并的内容
- git add .然后执行- git rebase --continue(如果出现需要手动解决冲突的情况,解决后保存并退出,执行这条命令)
- git push -f origin xxx强制推送更新后的代码到远端
- 项目负责人采用 pull request 中的 squash and merge 来合并所有不同的 commit
完成远端合并后
- git branch -d xxx删除本地分支 xxx
- git pull origin master将远端的最新代码拉至本地
在多人合作中,通过上述流程可以更好地管理分支和代码冲突,确保开发效率和代码的整洁度。
名词解释
为了帮助 Git 新手理解一些常用的指令,下面是对视频中出现的指令及其含义的整理:
- git checkout -b xxx:- git checkout xxx是切换到 xxx 分支,- b意味着创建新分支,因此这条指令的意思是创建并切换到 xxx 分支。
- git diff:查看暂存区与工作区文件的差异。
- git add xxx:将 xxx 文件添加到暂存区。
- git commit:将暂存区内容提交到当前分支。
- git push <RemoteHostName> <LocalBranchName>:将本地分支推送到远程主机的同名分支(若加- f表示强制推送)。
- git pull <RemoteHostName> <RemoteBranchName>:从远程主机下载指定分支并与本地同名分支合并。
- git rebase xxx:假设当前分支与 xxx 分支存在共同部分 common,该指令将 xxx 分支的内容包括 common 在内替换当前分支的 common 部分。
- git branch -D xxx:强制删除本地分支 xxx。
Git 拉取指定的提交记录(用于合并出错的紧急情况)
- 克隆远程仓库到本地:git clone [地址],例如git clone https://github.com/aa/bb.git
- 查看提交记录的 ID:git log --pretty=oneline,显示每个提交记录的简短信息和 ID
- 创建一个新的分支并切换到该分支:git checkout -b [分支名] [提交ID],例如git checkout -b master 2342dsfsdfs2
- 可在本地分支上查看或修改代码,若要推送到远程仓库使用 git push origin
Git 拉取指定的分支
在 Git 中,如果想拉取特定分支的代码到本地,可以使用以下命令:
例如:
这样只有指定的分支会被克隆到本地。如果已经克隆整个仓库或在现有本地仓库中工作,可以使用 
git fetch origin 和 git checkout <branch-name> 来切换到指定分支。GitHub 提交规范
- type 类型(必须)
| 代码 | 说明 | 
| feat | 新功能 | 
| fix | 修复 | 
| docs | 文档注释 | 
| style | 代码格式 | 
| refactor | 重构、优化 | 
| perf | 性能优化 | 
| test | 增加测试 | 
| chore | 构建过程或辅助工具的变动 | 
| revert | 回退 | 
| build | 打包 | 
- scope(可选)
scope 用于说明 commit 影响的范围,比如数据层、控制层等。
- subject(必须)
简短描述 commit 目的,不超过 50 个字符。
示例:
添加多个 Emoji 图标
| emoji | 代码 | 说明 | 
| :art: (调色板) | :art: | 改进代码结构/代码格式 | 
| :zap: (闪电) | :zap: | 提升性能 | 
| :fire: (火焰) | :fire: | 移除代码或文件 | 
| :bug: (bug) | :bug: | 修复 bug | 
| :memo: (备忘录) | :memo: | 撰写文档 | 
常见 Git 分支命名规范
- master/master:主分支,用于发布稳定版本,不能直接在该分支上开发。
- develop:开发分支,用于日常开发,所有 feature 分支都从该分支创建,也是最终合并到 master/master 分支的来源。
- feature/{feature_name}:功能分支,用于开发新功能或修复 bug。
- hotfix/{issue_number}:修补分支,用于紧急修复问题,一般从 master/master 分支创建。
- release/{version_number}:预发布分支,用于发布前的测试和准备工作。
命名规范可以根据团队的实际情况进行调整,但应保持可读性和清晰性。