github使用总结

github工作流笔记

步骤繁杂,却也是做开源必须遵循的原则,避免污染代码。
主要供自己学习,查询。

注意三个代码的三个过程

  • remote: 远程github仓库的代码
  • Local: 本地仓库中的代码
  • Disk: 本地磁盘,真正被程序员修改的代码

操作步骤(开源贡献或公司项目)

第一步:从remote server下载源码到Local,第一次clone后,remote ,Disk内容和Locald都是相同版本。

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

第二步:避免污染源代码,基于Local复制一份branch为 my-feature。此时Local会有两个版本main(master branch)和my-feature。

1
git checkout  -b my-feature

第三步:切换为my-feature,编辑器编辑此branch的源码。查看Disk上的代码的修改

1
git diff

第四步:将Disk修改了的内容,告知Local git。这些内容会被放到一个暂缓区,尚未修改Local git的my-feature分支的源码。

1
git add <changed_file>

第五步:确定代码没问题后或多次add提交后,将暂存区中的源提交到Local git。此时Local git中的my-feature branch的源码是最新修改过的版本。main branch没变化。

1
git commit -m "new xxxx change"

第六步:将Local git的my-feature push到远程服务器

1
git push origin my-feature

第七步:可能github上有其他贡献者,整合了新的更改在github的main中(即此时Local的main和github的main也可能不同)。
为了解决这个问题,将disk切换为main,再把Local和Disk都同步为最新的main

1
2
git checkout main
git pull origin master

第八步:Disk切换为my-feature,在my-feature分支下,将Local中的新的main和my-feature合并。采用rebase(优先接受main中的改变,再接受my-feature中的修改)
rebase 可能出现rebase conflict,需要手动修改my-feature,再add commit来适配。
也可以采用merge,但针对开源代码,优先考量他人的代码是正确的(毕竟有人专门审核)

1
git rebase main

第九步: Local中上一步得到的结果,相当于在最新的github的main的基础上做了修改,将本地的branch(强行单人开发的可以-f,多人协作避免使用)push到github。

1
git push -f origin my-feature

第十步: 告诉项目主人,将my-feature的分支整合到github中的main中去,这可以是在github的网页操作了,不用在本地命令行执行

1
New pull request

第十一步: 项目主人,审查代码后,整合你的my-feature代码到main中
Squash and merge(将这个分支上的所有改变,合并成一个改变)

1
Squash and merge 

第十二步:github网页端删除my-feature,Local切换到main,删除my-feature,之后同步下来最新的到main中

1
2
git branch -D my-feature
git pull origin master

总结

  1. 如此繁琐操作的核心,在于更改尽量在my-feature中,同时需要考虑同步时候,和最新的main的conflict.
  2. 后续在工作中一步一步的实践,理解,向着开源学习。

github使用总结
http://oowatermelon.github.io/OoWaterMelonS/2022/10/03/github使用总结/
作者
OoWaterMelonS Shao
发布于
2022年10月3日
许可协议