github Pull Request合入全流程介紹
阿新 • • 發佈:2020-07-01
圖解全流程
詳細步驟
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整個流程已完成。
之前也寫過類似的兩篇文章:
- github的pull Request使用
- github上fork原專案,如何將本地倉庫程式碼更新到最新版本?
不同之處在於合入方式,之前寫的是按照"merge pull request“合入,在最近開發中,發現這樣始終會多出一個commit,在fork倉庫同步的時候又會多出一個commit,來回多了兩個commit,並且commit log看起來也會交錯在一起,不便於閱讀。。諸如下圖
通過本篇文章操作後,commit log如下圖,清晰整潔。
不斷的學習!不斷的爬坑!不斷的總結!寫出更優質的程式碼!