Git 工作流程
Git 工作流程——以Github为例
适用于个人和小团队的标准工作模式
学习视频:十分钟学会正确的github工作流,和开源作者们使用同一套流程
假设项目初始内容如下
Github:
- main(master) 分支 Init 内容
Loacl git:
- main(master) 分支 Init 内容
DIsk:
- main(master) 分支 Init 内容(仅作理解)
1. 建立个人工作分支
使用如下命令创建一个个人工作的分支并切换到该分支上
1 | git checkout -b my-feature |
当前状态如下
Github:
- main(master) 分支 Init 内容
Loacl git:
- main(master) 分支 Init 内容
my-feature分支 Init 内容
DIsk:
my-feature分支
Init 内容
2. 对本地内容进行修改、提交、推送
(1) 当前状态如下
Github:
- main(master) 分支 Init 内容
Loacl git:
- main(master) 分支 Init 内容
- my-feature分支 Init 内容
DIsk:
- my-feature分支
Init-changes
内容
使用git diff
可查看对比做出修改的内容
(2) 暂存更改内容
使用git add <filename>
暂存已做出的修改
此时状态如下
Github:
- main(master) 分支 Init 内容
Loacl git:
- main(master) 分支 Init 内容
- my-feature分支
Init-changes
内容DIsk:
- my-feature分支 Init-changes 内容
(3) 提交已暂存的更改
使用git commit
命令提交
若想添加注释可使用如下命令
1 | git commit -m "text" |
此时状态如下
Github:
- main(master) 分支 Init 内容
Loacl git:
- main(master) 分支 Init 内容
- my-feature分支
Init-f-commit
内容DIsk:
- my-feature分支 Init-f-commit 内容
(4) 将内容push
到Github上
使用git push origin my-feature
将内容push到Github中自己的分支
此时状态如下
Github:
- main(master) 分支 Init 内容
- my-feature分支
Init-f-commit
内容Loacl git:
- main(master) 分支 Init 内容
- my-feature分支 Init-f-commit 内容
DIsk:
- my-feature分支 Init-f-commit 内容
若此时GitHub中的main(master)分支有其他的修改或提交,须进行第三步处理主分支的改变
此时状态如下
Github:
- main(master) 分支
Init-update
内容- my-feature分支 Init-f-commit 内容
Loacl git:
- main(master) 分支 Init 内容
- my-feature分支 Init-f-commit 内容
DIsk:
- my-feature分支 Init-f-commit 内容
3. 处理主分支的改变
(1) 本地返回main(master)分支
1 | git checkout main |
此时状态如下
Github:
- main(master) 分支 Init-update 内容
- my-feature分支 Init-f-commit 内容
Loacl git:
- main(master) 分支 Init 内容
- my-feature分支 Init-f-commit 内容
DIsk:
main(master)分支 Init 内容
(2) 拉取远程改变
1 | git pull origin main |
此时状态如下
Github:
- main(master) 分支 Init-update 内容
- my-feature分支 Init-f-commit 内容
Loacl git:
- main(master) 分支
Init-update
内容- my-feature分支 Init-f-commit 内容
DIsk:
- main(master)分支
Init-update
内容
(3) 切换回my-feature分支并合并代码
使用以下命令切换回my-feature
分支
1 | git checkout my-feature |
再使用以下命令合并代码
1 | git rebase main |
此时可能会出现rebase conflict
,需要手动选择要保留的代码
此时状态如下
Github:
- main(master) 分支 Init-update 内容
- my-feature分支 Init-f-commit 内容
Loacl git:
- main(master) 分支 Init-update 内容
- my-feature分支 Init-f-commit 内容
DIsk:
my-feature
分支Init-update-f-commit
内容
(4) 推送my-feature
分支
使用以下命令推送
1 | git push -f origin my-feature |
-f
表示强制,切忌在pushmain
分支时使用,须谨慎谨慎再谨慎!!!!!!!!!
此时状态如下
Github:
- main(master) 分支 Init-update 内容
- my-feature分支
Init-update-f-commit
内容Loacl git:
- main(master) 分支 Init-update 内容
- my-feature分支 Init-f-commit 内容
DIsk:
- my-feature分支 Init-update-f-commit 内容
(5) 审查并合并到main
分支
此时生成新的pull request
,项目管理员审查代码之后Squash and merge
合并分支的改变并同步到main
分支,简化提交内容,此时状态如下
Github:
- main(master) 分支
Init-update-update2
内容my-feature 分支
Loacl git:
- main(master) 分支 Init-uodate 内容
- my-feature分支 Init-f-commit 内容
DIsk:
- my-feature分支 Init-update-f-commit 内容
(6) 清理本地分支
a. 切换到main(master)分支
1 | git checkout main |
b. 删除my-feature分支
1 | git branch -D my-feature |
-D
表示强制删除,切忌使用在main分支上,须谨慎谨慎再谨慎!!!!!!!!
此时状态如下
Github:
- main(master) 分支 Init-update-update2 内容
Loacl git:
- main(master) 分支 Init-update 内容
my-feature分支 Init-f-commit 内容
DIsk:
main(master)分支 Init-update 内容
c. 拉取最新main(master)分支
1 | git pull origin main |
此时状态如下
Github:
- main(master) 分支 Init-update-update2 内容
Loacl git:
- main(master) 分支 Init-update
-update2
内容DIsk:
- main(master)分支 Init-update
-update2
内容
至此一个工作环节结束