开源项目贡献流程
该文写于 PLCT deepin 小队实习期间,总结通过 Git 向开源项目提交贡献的大致流程以及过程中可能遇到的问题及解决办法。主要以向 deepin 社区提交修包pr为例。方便之后修包过程中快速解决同样的问题,也希望能帮助到和笔者一样的小白。
当明确了要修的包以后,github 中找到 deepin 社区( https://github.com/deepin-community )
搜索对应的仓库并 fork
在本地 clone 自己 fork 后的仓库
git clone [repository]
//推荐通过 ssh 进行 clone
//可以省去之后重复验证 github 账号
修改之前,为不把主分支搞乱,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
git checkout -b feature
//创建并转到 feature 分支
修改之后提交 commit
git add [file]
//将需要的文件添加进暂存区
//修包一般需要提交 changelog 和新打的 patch 和series
git commit -m "[commit message]"
//提交 commit 需要注意符合规范
将修改提交至远程仓库
git push [remote repository]
此时就可以在远端仓库向上游提交 PR
需要在 PR 中符合规范并简明的描述
PR 成功合并后就可以删除 feature 分支
git checkout master
//删除前先转至主分支
git branch -D feature
//强制删除feature分支
在下一次开发前,需先检查上游仓库是否更新
若上游已经更新需要进行同步
git fetch upstream
git rebase upstream/master
//主分支保持同步
同步完成后就可以重复之间的操作,切至新分支进行开发
以下为一些可能遇到的问题:
提交PR,如有多次 commit ,需要通过 rebase 合并为一个 commit ,便于管理。
rebase 合并 commit 流程:
-
首先查看提交历史:git log
-
然后执行 git rebase -i <版本号> ,即合并这个 commit 之后的所有 commit (不包括这个)
-
进入编辑器做如下修改
pick <需合并的版本号> '注释**********' s <需合并的版本号> '注释*********' s <需合并的版本号> '注释**********'
-
git log 看到 commit 已经合并
-
最后通过 git push -f 强制 push 到远端
pr重开是不合适的行为 有问题可以考虑rebase+push force
撤销已经提交到远端的 commit:
- 先本地回退到相应的版本
git reset --hard <版本号>
//注意使用 --hard 参数会抛弃当前工作区的修改
- 覆盖远端的版本信息
git push origin <分支名> --force
//使远端的仓库也回退到相应的版本,需要加上参数--force