GitHub工作流学习

第一步:克隆远程仓库

使用 git clone 命令将远程仓库克隆到本地

1
git clone https://github/example/example.git

image.png

Remote:表示远程的仓库

Local:表示本地的仓库

Disk:是源文件真正在磁盘的样子,也是编辑器打开源文件的状态。

在刚进行完 git clone 的时候,RemoteLocalDisk 中的内容是一样的。

第二步:建立新的 feature branch

1
git checkout -b my-feature

建立一个新的feature branch。这会复制一份当前 branch 到新 branch上,相当于把当前main branch复制到了my-feature上。因此现在在 Local 上有 mainmy-feature 两个branch

image.png

建立feature branch而不直接往 mainpush 代码的好处是,这样不会导致主分支无法正常工作,有利于多人合作开发项目。

其中”my-feature“就是branch的名字。这里branch根据实际命名

image.png

第三步:修改代码

当在本地修改代码并保存后,硬盘上的文件是有所变化的,但是git是一无所知的,可以使用下面的命令查看现在硬盘和git保存的分支有什么区别。

1
git diff

image.png

当决定想把修改的文件告知 git 的时候,可以使用 git add 命令放入暂存区。

1
git add <changed_file>

或者使用下面的命令将所有修改的文件放入暂存区。现在git就知道了有一些代码想要 commit

1
git add .

image.png

在进行 git add 添加想修改的文件后,可以使用 git commit 把修改真正的提交给git,此时可以使用git commit 命令

1
git commit

image.png

Disk git 执行了 git commit 后,Local git 就会新增一个 commit

第四步:git push

接下来将Local git 的变化告知 GitHub,使用git push origin my-feature

1
git push origin my-feature

image.png

那么现在github就会多出一个新的branch,是my-feature 保存着修改后的代码。

第五步:更新合并代码

这一步就需要把更新好的代码合并到main branch中,这个过程称为:pull request

image.png

pull request的含义为:request当前项目的所有者将新的分支的改变给pull到项目中。

image.png

然后main branch 的维护者审查代码后,会使用 squash and merge

image.png

image.png

image.png

GitHub 使用 Squash and Merge 的主要作用是将功能分支的多个提交压缩为一个单独的提交后合并到目标分支(如 main 或 **master**),从而保持目标分支的提交历史简洁。

pull requestmerge 后,一般情况后会把远端 my-feature branch 删掉

然后更改 Local git 上的 branch

  1. 切换到 main branch
1
git checkout main

image.png

  1. 删除 my-feature

Local branch中删掉my-feature

1
git branch -D my-feature

image.png

image.png

  1. 把最新的更新拉取到Localmain branch
1
git pull origin main

image.png

在进行一系列操作后,Local、Disk 就和 Remote 一致了

image.png

例外情况:在push后如果main更新了

在把改动Pushmy-feature后,可能main(master)分支已经更新了。因此需要确认my-featuremian branch update是否仍然可用,所以要把main分支的更新同步到my-feature分支中。

image.png

下面将main branch的更新同步到my-feature里。

  1. 首先更新 Local branch,此时可以看到当前local branch中的mainRemote branchmain是不一样的

image.png

切换到 main branch中,使用

1
git checkout main

这时候硬盘中源代码就是Init状态,就不是刚刚修改的状态

然后运行下面命令,将远端的代码同步到Localmain中,这个时候LocalDisk 中的branch就和Remote一样了。

1
git pull origin main

image.png

image.png

  1. 回到 my-feature

    1
    git checkout my-feature

    image.png

image.png

当前my-feature的代码就是有修改后f-commit的变化,但是没有Remote update的变化,现在需要同Remote update的变化,使用下面命令。

1
git rebase main

git rebase main 含义的意思是:先把本地修改放一边,把main最新修改更新后然后再讲本地修改的commit尝试更新。在这个过程中有可能会有 rebase conflict,那么就需要手动选择到底要哪一段代码。

在命令执行成功后,my-feature branch就变成下面的样子

image.png

  1. 在更新完my-feature branch之后,需要git push origin my-feature,把Local branch pushgithub上。

    1
    git push -f  origin my-feature

image.png

参考

  1. 【十分钟学会正确的github工作流,和开源作者们使用同一套流程】 https://www.bilibili.com/video/BV19e4y1q7JJ/?share_source=copy_web&vd_source=83ecb40e0aba9eb1808acef2324b7653

GitHub工作流学习
https://suiyideali.github.io/2025/04/02/GitHub工作流学习/
作者
m0ch4z
发布于
2025年4月2日
更新于
2025年4月2日
许可协议