0%

Github 贡献代码流程

分两种情况:

  1. 代码仓库管理者给你添加该仓库的写入权限,这样的话可以直接push
  2. 如果不能直接push(大多数情况),采用经典的 fork & pull request 来提交代码,下面讲述这种情况

fork

首先需要fork这个项目, 进入项目页面, 点击右上角的 Fork按钮

git clone

clone到本地:

git clone https://github.com/yourname/project.git

添加原项目远程地址

使用 git remote -v 查看 origin 和 upstream 对应的是否正确:

  • origin对应的应该是自己github的地址,即yourname/project
  • upstream对应的应该是原项目的地址,即sourcename/project
$ git remote add upstream https://github.com/sourcename/project.git //设置原代码地址
$ git remote -v
origin  git@github.com:breezet/ccextractor.git (fetch)
origin  git@github.com:breezet/ccextractor.git (push)
upstream    https://github.com/CCExtractor/ccextractor.git (fetch)
upstream    https://github.com/CCExtractor/ccextractor.git (push)

获取原项目最新代码

git pull upstream master

创建分支

  • 好了, 现在可以开始贡献我们的代码了 按照国际惯例, 我们一般不在 master 上提交新代码,
    而需要为新增的功能或者 fixbug 建立新分支, 再合并到 master 上, 使用以下代码创建分支
git checkout -b branch1

现在我们可以在分支上更改代码了

  • 假设我们已经添加了一些代码, 提交到代码库
git commit -a -m "new commit"

合并修改

  • 一个常见的问题是远程的 upstream 有了新的更新,
    从而会导致我们提交的 Pull Request 时会导致冲突,
    因此我们可以在提交前先把远程其他开发者的commit和我们的commit合并.

  • 使用以下代码切换到 master 分支:

git checkout master
  • 使用以下代码拉出远程的最新代码:
git pull upstream master
  • 切换回 branch1:
git checkout branch1
  • 把 master 的 commit 合并到 branch1:
git rebase master
  • 把更新代码提交到自己的 branch1 中:
git push origin branch1

Pull Request

  • 可以在你的 github 代码仓库页面切换到 branches 页面点击 branch1 分支后点击 New pull request 按钮, 添加相关注释后提交.
  • 或者,切换到 branch1 分支的代码仓库点击 Compare & pull request 按钮, 添加相关注释后提交.

Pull Request发送之后……

一旦你从自己的主题branch(例如branch1)推送了一条Pull Request,
那么在这条Pull Request被关闭之前,再次向这个branch里push代码,
所有的commits都会被自动追加到这个Pull Request后面(不需要再另开Pull Request)。

这个功能尤其有用,比如你最初提交的Pull Request里存在某些问题,项目维护者要求你打回去修改;
或者要求你给你的新feature添加一条相应的unit test(这种情况简直太常见了)。
只要追加commits到你的这个主题branch中即可。

Pull Request关闭之后

如果是已经被merge后关闭的Pull Request,你可以在页面的最下方找到一个“Delete this branch”的蓝色按钮。

这表明这个主题branch的历史使命已经完成(branch1的commit已经被合并到主项目中),可以安全地从远程库中删除了。

在本地库中亦可删除这个branch:

$ git branch -d fix-unicode-error
  1. 如何给开源项目贡献代码
  2. 如何优雅地在github上贡献代码
  3. fork一个项目到贡献代码流程
  4. Pull Request的正确打开方式