本文记录 Fork 仓库到创建分支、提交改动、发起 PR、再到删除分支的完整流程,防止自己忘记。

一、Fork远程仓库

1、打开原作者的仓库页面,如https://github.com/Gridea-Pro/gridea-pro-themes
2、点击右上角Fork按钮,自动跳转到Create a new fork界面,点击Create fork按钮。

二、保持主分支干净

Fork 完成后,仓库会有一个默认分支(通常为 master 或 main),请勿在主分支上开发。

三、拉取远程仓库代码

使用 git clone 将Fork后的远程仓库clone到本地。
克隆远程远程仓库的方法有很多。
(1) 使用clone命令下载远程仓库,git clone
远程URL是Git用于指代“代码存储位置”的专业术语。该URL可以是您在GitHub上的仓库、其他用户的分支,甚至位于完全不同的服务器上。
您只能向两种类型的URL地址发送推送:
一个类似 https://github.com/user/repo.git 的 HTTPS URL
一个 SSH URL,例如 git@github.com:user/repo.git
Git会将远程URL与名称关联,默认的远程路径通常称为“origin”。
有时你会选择使用Github文件加速网站加速下载文件,这时候 git clone 就会使用例如

git clone https://gh.xmly.dev/https://github.com/stilleshan/ServerStatus

提交到远程仓库时会提示

remote: Invalid username or token. Password authentication is not supported for Git operations.
fatal: Authentication failed for ……

此时需要把远程仓库地址从加速地址改成原始地址,这条命令不会影响你的分支和提交。

git remote set-url origin <远程仓库地址>

(2) 使用初始化仓库下载远程仓库

1. 在当前目录初始化一个空的本地仓库
git init

2. 将本地仓库与远程仓库关联(origin 是默认的远程名称)
git remote add origin <远程仓库地址>

3. 在 fetch 之前,先用这个命令查看远程仓库的默认分支叫什么
git remote show origin

4. 从远程仓库下载所有数据
git fetch --all

5. 创建并切换到本地 main 分支,并让它跟踪远程的 origin/main
git checkout -b main --track origin/main

6. 手动创建一个本地分支来跟踪远程分支,并检出文件
# 创建并切换到本地 main 分支,并让它跟踪远程的 origin/main
git checkout -b main --track origin/main

如果你想获取远程仓库的所有分支,其实不需要加 –all,因为 git fetch origin 默认就会下载该远程仓库下的所有分支和提交。

如果你的远程仓库只有一个(即 origin),直接写 git fetch origin 效果完全一样。

只想 fetch 到主分支(main 或 master),直接指定分支名即可。

# 如果主分支是 main
git fetch origin main

创建并切换到本地分支跟踪远程分支完全取决于你 fetch 了哪个远程分支。如果你 fetch 了 main,就写 origin/main:

git checkout -b main --track origin/main

Git 提供了一个更智能的快捷命令,它会自动识别远程分支名,并在本地创建同名的分支。

# 无论远程是 main、master 还是 develop,Git 都会自动取相同的名字
git checkout --track origin/main   # 本地自动生成 main 分支
git checkout --track origin/master # 本地自动生成 master 分支

四、新建功能/修复分支

(1) 创建一个新的分支
要创建新分支,请使用以下命令:

git branch <branch_name>

(2) 创建新分支并切换至该新分支
你可以使用以下方式创建新分支并立即切换:

git checkout -b <branch_name>

五、在分支上开发并提交

本地端需要执行的相关命令如下:

git checkout master
git pull upstream master        # 同步上游
git checkout -b feat/typography
# 添加或修改文件后:
git add .
git commit -m "feat(typography): 新增typography 主题(Jinja2移植)"
git push origin feat/typography

业界通用的 git 提交规范

AngularJS 在 github上 的提交记录被业内许多人认可,逐渐被大家引用。格式:

type(scope) : subject

( 1 ) type(必须) : commit 的类别,只允许使用下面几个标识:
feat : 新功能
fix : 修复bug
docs : 文档改变
style : 代码格式改变
refactor : 某个已有功能重构
perf : 性能优化
test : 增加测试
build : 改变了build工具 如 grunt换成了 npm
revert : 撤销上一次的 commit
chore : 构建过程或辅助工具的变动
( 2 ) scope(可选) : 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
( 3 ) subject(必须) : commit 的简短描述,不超过50个字符。
commitizen 是一个撰写合格 Commit message 的工具,
遵循 Angular 的提交规范。
安装:
全局安装 commitizen

npm install -g commitizen

进入项目文件夹,运行如下命令:

commitizen init cz-conventional-changelog --save --save-exact

使用:
git cz 命令取代 git commit,这时会出现如下选项:
( 1 )选择 type
( 2 )填写 scope(选填)

? What is the scope of this change (e.g. component or file name)? (press enter to skip)
core

( 3 )填写 subject

? Write a short, imperative tense description of the change:
set a to b

完成,运行 git log 命令,查看我们刚才提交的 commit message,如下:

fix(core): set a to b

六、发起 Pull Request

在你的 GitHub Fork 页面上,点击黄色横幅 Compare & pull request;或进入 Pull requests > New pull request。
Base repository 选择原作者仓库,base branch 选择 master(或指定的开发分支);
Head repository 选择你的 Fork 分支 feat/typography。
填写 PR 标题和描述,建议和提交的 message 写的一样,例如:

feat(typography): 新增typography 主题(Jinja2移植)

点击 Create pull request。

七、合并后删除分支

等待维护者审核并合并后,可在 PR 页面点击 Delete branch;
或者在本地和远程执行:

git checkout master
git pull upstream master
git push origin master
git branch -d feat/typography
git push origin --delete feat/typography

参考

如何在 GitHub 上提交 PR (Pull Request)
如何在github上进行PR
git commit 代码提交规范