github Pull Request合入全流程介紹


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

  1. github的pull Request使用
  2. github上fork原項目,如何將本地倉庫代碼更新到最新版本?
    不同之處在於合入方式,之前寫的是按照"merge pull request“合入,在最近開發中,發現這樣始終會多出一個commit,在fork倉庫同步的時候又會多出一個commit,來回多了兩個commit,並且commit log看起來也會交錯在一起,不便於閱讀。。諸如下圖
    腦殼疼的commit log.png

通過本篇文章操作后,commit log如下圖,清晰整潔。
整潔舒服的commit log.png

------進入正題-------

圖解全流程

全流程.png

詳細步驟

1. fork倉庫

fork倉庫.png

2. clone fork倉庫到本地

clone.png

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的某個分支
create pull request.png

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”進行合入
image.png
合入后會產生如下圖的一條commit:
這條commit包含了發起PR時fork倉庫的幾個commit
image.png

7. fork本地倉庫更新

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

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

更新前:test4和test5為兩次commit
image.png
更新后:test4和test5合並為fork原倉庫通過squash and merge產生的commit
image.png

8. 修改文件后,再commit + push

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

git push origin master --force

image.png

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM