Git 同步上游倉庫的更新#
使用一個 Github Template 創建了我自己的倉庫,需要同步一下補丁更新,總不能自己手抄一遍吧,搜了一下解決方案。
記錄一下。
添加上游倉庫#
給上游倉庫取個名字,如果將命名為 upstream
,可以在本地倉庫中運行以下命令:
git remote add upstream https://github.com/$<upstream-repo>.git
獲取上游倉庫的更改#
運行以下命令以獲取上游倉庫中的所有分支和提交:
git fetch upstream
合併上游更改#
現在,將上游 main 分支的更改合併到您的本地 main 分支:
git merge upstream/main --allow-unrelated-histories
如果只需要合併特定的 commit :
git cherry-pick <commit-hash>
也可以使用
gcp <commit-hash>
commit-hash 可以直接從 github 網頁上複製。
這時 commit 的作者是源倉庫的作者, Vercel 提示我 Build 失敗,需要升級到 Pro,可以再修改一個文件,自己添加一條 commit 。
當然這很不優雅,可以使用下面的命令獲取更改到文件,但是不會提交 commit ,
git cherry-pick <commit-hash> --no-commit
然後手動提交一下
git commit -m "commit information"
解決衝突#
如何自己已經修改過源代碼,在合併過程中可能發生衝突,需要手動解決。
Git 也會進行提示,手動編輯衝突文件並保存,然後再提交更改。
批量提交#
git cherry-pick <起始提交>^..<結束提交>
如果有衝突會按照順序處理,然後執行, continue 直到結束
git cherry-pick --continue
-
<起始提交>
:範圍的開始點(不包含此提交,除非用 <起始提交>~ 或 < 起始提交 >^)。 -
<結束提交>
:範圍的結束點(包含此提交)。 -
^
是 Git 的語法,用於指定 “之前的提交”。 -
..
表示範圍。
推送#
git push origin main
當然默認來說,並不會推送到新加入的 upstream
,直接 git push
即可
如果不再需要同步,可以刪除上游的倉庫
git remote remove upstream