想對別人的某個倉庫「做點貢獻」怎麼辦?
首先Fork該倉庫,本文以git-learn這個倉庫為例
這樣自己的賬號下就會出現這樣一個倉庫
然後把這個倉庫clone下來
git clone https://github.com/FlyLolo/git-learn.git
我新建了一個Student類
然後將修改提交
git add .
git commit -m 'add student'
git push origin master
這樣會將修改提交到自己賬號下的git-learn倉庫
那麼如何將修改提交到源倉庫呢?
如果想將修改提交到源倉庫,需要進行pull requests
點選上圖的pull requests按鈕,可以看到自動做了設定
圖中紅框部分顯示了提交修改的方向,即從自己賬號倉庫的main分支提交到源倉庫的main分支。
點選create pull request按鈕:
點選下面的按鈕提交就可。
此時源倉庫的作者在源倉庫的pull requests頁面就會看到如下的Merge pull請求
可以對該請求做相應的處理
比如點選Merge pull request同意將修改合併。
當一個倉庫被Fork過來之後,它是不會隨著源倉庫更新的,那麼如果想同步源倉庫的更新過來如何操作呢?
還是pull requests。
預設是向原倉庫提交修改請求
[外連圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-q1L0ByGC-1654552184213)(git-tag-update.assets/image-20220602094759603.png)]
我們現在不一樣,想用原倉庫更新fork過來的倉庫
首先修改左側的,改成自己的倉庫
此時會變成這樣
點選圖中的藍字「 compare across forks」,可以看到箭頭兩邊都是自己的倉庫
更改右側的倉庫,最終結果如下圖
已經找到了更新,點選右上角的create pull request 按鈕
更新即可,這樣就完成了main分支的更新。
看一下如何通過Fork方式滿足的我原始碼閱讀需求。
首先我想閱讀的是指定版本的原始碼,例如tomcat的10.0.21版本,這需要我去clone它的tag 10.0.21,這樣才能保證版本一致。
這裡我指定了標籤 v1.0
git clone -b v1.0 https://github.com/FlyLolo/git-learn.git
切換到對應的資料夾
cd git-learn
我想對部分程式碼進行註釋,並提交到自己的倉庫。(源倉庫估計不會接收這樣的修改請求,自己看就行了)
修改一個檔案,例如新增了一個註釋
準備提交修改
提示detached HEAD
如果是在IDEA中也會提示失敗
其實clone的時候已經有提示,見第一幅圖的紅框提示。需建立並切換到一個新的分支。我將其命名為tag-v1.0
git switch -c tag-v1.0
[外連圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-aIHXykxD-1654552184220)(git-tag-update.assets/image-20220602071921679.png)]
push的時候如果未指定分支會有如下提示:
按提示操作:
提交成功。網頁檢視一下,已經有了新建的分支:
如果此時源倉庫更新了v2.0甚至v3.0版本,而我這裡還是v1.0的程式碼怎麼辦?
首先,我想到了第二節的反向pull request, 機智如我
做了如上圖設定,右側選擇了源倉庫的tag v3.0 ,如願的識別出了差異,但此時才發現原來的create pullrequest按鈕沒有了,嘗試失敗。
檢視現有的remote地址
git remote -v
新增源倉庫地址到upstream
git remote add upstream https://github.com/Test-2022/git-learn.git
再次檢視remote地址列表
git remote -v
獲取upstream的資料
git fetch upstream
可以看到獲取到了源倉庫的各個分支和tag。
也可以獲取指定的tag
git fetch upstream tag v3.0
合併分支
git merge v3.0
如果像這樣出現合併衝突,自行解決衝突即可。