github Pull Request 合入全流程介紹
之前也寫過類似的兩篇文章:
- github 的 pull Request 使用
- github 上 fork 原項目,如何將本地倉庫代碼更新到最新版本?
不同之處在於合入方式,之前寫的是按照 "merge pull request“合入,在最近開發中,發現這樣始終會多出一個 commit,在 fork 倉庫同步的時候又會多出一個 commit,來回多了兩個 commit,並且 commit log 看起來也會交錯在一起,不便於閱讀。。諸如下圖
通過本篇文章操作後,commit log 如下圖,清晰整潔。
------ 進入正題 -------
圖解全流程
詳細步驟
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。
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 整個流程已完成。
不斷的學習!不斷的爬坑!不斷的總結!寫出更優質的代碼!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://www.cnblogs.com/eyunhua/p/13215936.html