1. 程式人生 > 實用技巧 >github Pull Request合入全流程介紹

github Pull Request合入全流程介紹

圖解全流程

詳細步驟

1. fork倉庫

2. clone fork倉庫到本地

3. 關聯upstream原倉庫

在fork本地倉庫輸入下面命令進行關聯:

git remote add upstream <原倉庫github地址>

檢視倉庫地址:

git remote -v

4. fork本地倉庫commit+push

修改完檔案後執行下面命令:

git add .
git commit -m 'message'
// push推送到fork遠端倉庫
git push origin master

5. 發起Pull Request

在fork遠端倉庫,點選Pull Request->New Pull Request,進入以下截圖頁面


base repository為原倉庫的某個分支,

head repository為fork倉庫發某個分支

head的某個分支程式碼合到base的某個分支

6. 原倉庫合入PR

進入原倉庫的Pull requests可看到剛才發起的PR

github pull request介紹:https://help.github.com/cn/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request

三種合入方式介紹:

  • Merge pull request:將fork倉庫的每一次提交都合併到原倉庫,並且還產生了一個merge commit log。
  • Squash and merge:將多個commit合併為一個commit新增到原倉庫中,會產生一個新的commit id。
  • Rebase and merge:將fork倉庫的每一次提交都rebase到原倉庫,但github的rebase行為與git rebase略有偏差。GitHub上的變基和合並始終會更新提交者資訊並建立新的提交,也就是產生新的commit id。

選擇“Squash and merge”進行合入



合入後會產生如下圖的一條commit:

這條commit包含了發起PR時fork倉庫的幾個commit

7. fork本地倉庫更新

原倉庫合入後產生了一條新的commit id,為了保持一致,需要在fork本地倉庫進行更新

// 更新併合並原倉庫的master分支
git pull --rebase upstream master

更新前:test4和test5為兩次commit



更新後:test4和test5合併為fork原倉庫通過squash and merge產生的commit

8. 修改檔案後,再commit + push

這時,push推送到遠端倉庫,需要進行強制覆蓋fork遠端倉庫。因為fork遠端倉庫仍是test4、test5兩次提交的commit,而本地倉庫已經更新同步為原倉庫的合併commit。不強制覆蓋則會在push時提示需要更新與遠端分支同步。

git push origin master --force

到這裡!!!fork、clone、commit、push、pull整個流程已完成。

之前也寫過類似的兩篇文章:

  1. github的pull Request使用
  2. github上fork原專案,如何將本地倉庫程式碼更新到最新版本?

    不同之處在於合入方式,之前寫的是按照"merge pull request“合入,在最近開發中,發現這樣始終會多出一個commit,在fork倉庫同步的時候又會多出一個commit,來回多了兩個commit,並且commit log看起來也會交錯在一起,不便於閱讀。。諸如下圖

通過本篇文章操作後,commit log如下圖,清晰整潔。

不斷的學習!不斷的爬坑!不斷的總結!寫出更優質的程式碼!