[英]git: merge some changes from one branch to another without recording a merge
假設我有一個共同祖先的分支 A 和 B,它們已經分歧了。 我想將分支 A 上的一些更改應用到分支 B,但沒有記錄 A 已合並到 B,因此,如果我嘗試將 A“真正”合並到 BI 中,仍然會得到剩余的差異。
我可以通過以下方式做到這一點:
但肯定有更簡單的方法嗎?
上下文:我有一個基本分支(例如“main”)和一個帶有許多更改的功能分支(例如“feature”)。 我想創建一個僅包含功能分支上的一些更改的拉取請求,因此我為此創建了一個新分支(“pr1”)。 最終功能分支的 rest 可能會合並到“main”中,所以我不想在 git 歷史記錄中記錄所有“feature”都已合並到“pr1”中,因為一旦合並它看起來就好像所有“功能”都沒有合並到“主要”中。
編輯:我在 PR 中想要的更改並沒有整齊地包含在一些提交中。 特性分支上可能有一百個提交,包括一些合並,我只想獲取它當前的 state 並提交其中一些以供審查。
假設:
A
的一些(但不是所有)更改將被合並到分支B
中,但不會成為合並提交。以下是如何創建合並提交而不將其記錄為合並提交:
git checkout -b merge-from-A B
git merge A # If conflicts, resolve those and commit.
進行任何需要的修改以排除您不想從分支A
引入的內容並修改或創建新提交:
# Alternative 1
git commit --amend
# Alternative 2
git add .
git commit -m "Remove/disable blah blah because blah blah"
現在,您將分支A
中的更改合並到分支merge-from-A
中。 以下是如何將它們帶入分支B
而不將其記錄為合並:
git chechout B
git diff HEAD merge-from-A | git apply -
git add .
# Alternative 1
git commit -m "Partially merge of blah blah changes from branch A"
git branch -d merge-from-A
# Alternative 2
git commit -m "Partially merge of blah blah changes from branch A" -m "Command run: git diff HEAD merge-from-A | git apply -"
# Keep merge-from-A branch for reference
根據我的喜好,備選 2 選擇是最好的。
你可能想多了。 為什么不只是重建您現有的提交,以便它們包含您在pr1
中想要的提交,然后是您在pr1
中不想要的提交? 然后你只需在最后一次提交時創建一個分支,將go放入pr1
...
A -- B -- C (main)
\
W -- X -- Y -- Z (feature)
(pr1)
...並推動它形成pr1
,現在 go 正在處理feature
。
要重新安排提交 go 的方式,請使用git reset --mixed
一直到 LCA。 見我關於三種遺憾的文章; 這是類型 2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.