Git 工作流程
总结下日常 git 工作流程
假设 remote 仓库有一个开发分支 main,有一次初始提交 init
Remote main init
1 拉代码到 local
git clone xxx
2 在 local 建立自己的开发分支
git checkout -b my-feature
3 在这个新分支上进行开发...
Remote main init
------------
Local main init
my-feature init
git diff
查看改动
git add <changed_file>
将文件保存至暂存区
git commit
提交新增
此时 local 仓库的 my-feature 分支就会多了这次提交
Remote main init
------------
Local main init
my-feature init -> my-update
4 将本地工作分支整个 push 到远端
git push origin my-feature
此时 remote 仓库就会多了 my-feature 分支
Remote main init
my-feature init -> my-update
------------
Local main init
my-feature init -> my-update
5 解决冲突
在多人协同开发时经常遇到的情况是,当我们 push 代码时,remote 仓库的 main 分支代码已经更新过了
Remote main init -> update
my-feature init -> my-update
------------
Local main init
my-feature init -> my-update
所以我们需要测试一下我们的这次提交,在这个 main 分支的最新提交下是否能正常工作
所以需要将 remote 仓库 main 分支的最新提交同步到 local 的 my-feature 这个分支中
- 先更新 local 仓库的 main 分支
git checkout main
git pull origin main
Remote main init -> update
my-feature init -> my-update
------------
Local main init -> update
my-feature init -> my-update
- 然后回到 my-feature 分支
git checkout my-feature
使用 rebase
命令,将 my-feature 分支合并到 main 分支中
git rebase main
基于 main 分支的代码,将当前 my-feature 分支的 commits 尝试混入到 main 分支中
处理冲突后,此时 local 仓库的 my-feature 分支的提交就混入了远端的 update 提交
Remote main init -> update
my-feature init -> my-update
------------
Local main init -> update
my-feature init -> update -> my-update
- 最后将分支 push 到远端即可,注意由于我们使用了 rebase,在 push 时必须加 -f 参数
git push -f origin my-feature
Remote main init -> update
my-feature init -> update -> my-update
------------
Local main init -> update
my-feature init -> update -> my-update
到此我们的工作流程基本告一段落,下面要做的就是提交一个 pull request 给代码管理者
6 PR
代码管理者做好 CR 后,一般情况下会使用 squash and merge
选项,该选项的意思是,将这个新分支上面的全部改动合并成一个 commit
7 清理
合并完成后,一般会将 remote 的 my-feature 分支删除,在 local 仓库也要做些清理工作
git checkout main
git branch -D my-feature
删除 local 的 my-feature 分支
git pull origin main
同步远端代码
Remote main init -> update -> my-update
------------
Local main init -> update -> my-update