跳到主要内容

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 这个分支中

  1. 先更新 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
  1. 然后回到 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
  1. 最后将分支 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