簡體   English   中英

如何將提交從一個分支復制到另一個分支

[英]How to copy commits from one branch to another

我有兩個我正在努力的功能

共享 - 提交 - A - B - C Feat1

共享 - 提交 - D - E - F Feat2

問題是,為了測試Feat2我也確實需要Feat1,但我仍然希望它們作為單獨的分支,因為它們是不同的。 有什么好方法可以對Feat2進行更改,然后快速創建第三個分支,這兩個分支都在一起,不需要我每次都要銷毀它。

共享 - 提交 - Feat1 - Feat2

我在做的是

git checkout feat2 git branch -b combo git rebase -i feat1

但是當我對feat2進行更新時,我不知道如何合並這些新的更改。

這里基本上有兩種選擇。

  1. 您可以使用cherry-pickfeat2上的新提交復制到combo
  2. 您可以合並而不是重新定位

采摘櫻桃

要在feat2上選擇新的提交到combo ,請運行以下命令:

git checkout combo
git cherry-pick <new commit> <new commit> <new commit>

合並

或者,您可以合並而不是重新定位。 例如,要創建組合:

git checkout -b combo feat1
git merge feat2

然后,從feat2 “合並新的變化”,只是......

git merge feat2

同樣,要在feat1上合並新的提交:

git merge feat1

合並

您可以合並而不是rebase。 由於您的組合分支僅用於測試,因此您不必擔心歷史記錄有點混亂。

那是:

git checkout feat2
git branch -b combo
git merge feat1

稍后,當您更新feat2時:

git checkout combo
git merge feat2

每當您對feat1或feat2進行更新時,請將其合並到組合中。

缺點是你必須合並兩個分支中的所有提交。 如果您不想要更改,則必須單獨提交以刪除組合分支中的更改。

墊底

您可以將附加提交從feat2重新綁定到組合。

假設您在feat2上添加了一些提交,然后將這些提交移動到組合:

git rebase --onto combo lastcommittoexcludeonfeat2 feat2

或者,在對feat2進行更改之前,添加分支或標記,例如:

git checkout -b lastfeat2rebase
git checkout feat2
git commit ... # more commits here to feat2
git rebase --onto combo lastfeat2rebase feat2

請注意,一旦使用了rebase選項,就不能再使用merge選項了。 如果使用合並選項,則可以稍后決定使用rebase選項。

暫無
暫無

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

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