假設有 4 個檔案 A、B、C 和 D,其中檔案 A、B、C 提交到主分支。
我現在創建一個新分支(我們稱之為子分支),git checkout sub-branch進行更改,并僅提交檔案 D。
但是,當我通過運行將檔案 D 上提交的更改推送到遠程存盤庫(Github)時git push -u origin sub-branch,甚至檔案 A、B、C 的提交也會添加到此分支中。
我只希望檔案 D 上提交的更改反映在新創建的子分支中,我該如何實作?
uj5u.com熱心網友回復:
分支只是提交的指標。假設分支main包含這些提交:
X-A-B-C
并且main是指向 commit C。當您創建新分支時,您從main它開始相當于從 commit 開始C:
git switch -c sub-branch main
# since main points to C this is the same as
git switch -c sub-branch C
相反,聽起來您只需要從較早的提交中創建新分支:
git switch -c sub-branch X
如果你這樣做了,sub-branch結果會是X-D. 由于您已經創建了分支,您可以通過將其重置為X和櫻桃采摘來修復它D:
git switch sub-branch
git reset --hard X
git cherry-pick D
uj5u.com熱心網友回復:
幾個選項是:
- 從遠程簽出(假設尚未推送提交)。
- 在 main 中進行更改 A、B、C 之前檢查分支,然后在新創建的分支中進行更改 D。
- 在進行更改 A、B、C 之前從特定提交中簽出
git checkout -b <new_branch_name> <sha1>
uj5u.com熱心網友回復:
在您結帳到新分支之前,請確保您的所有更改都已提交。
如果您不想提交重置或存盤更改。
這將解決您的問題。
現在,如果您在分支 D 中提交任何內容,它將僅推送這些更改。
uj5u.com熱心網友回復:
但是,提交已經被推送到遠程主分支。
新的子分支將包括一個只對 D 進行更改的提交。
然而,它的父提交將來自分支 main(以及之前的父提交)
這就是提交鏈的含義:有向無環圖 (DAG)
當我從 fork repo 的子分支創建 PR 到原始 repo 的主分支時,它顯示更改了 4 個檔案而不是 1 個。
那是因為目標分支還沒有這些檔案。
如評論所述, agit log --oneline --graph --decorate --all --branches將向您顯示該圖表。
我想知道如何獲得 X 的哈希值
您還可以使用git merge-base:
git merge-base main sub-branch
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451130.html
標籤:混帐 github git 分支 git 提交 git-fork
