簡體   English   中英

git:將一些更改從一個分支合並到另一個分支而不記錄合並

[英]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。

https://stackoverflow.com/a/59675191/341994

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM