在git中,我如何将一个提交从一个分支中移除并应用到另一个分支上?

31

我有两个分支从主分支(master)分离出来,每个分支都为不同的特性(feature),然后我有一个合成分支(synthesis),它将这两个特性结合起来。我把一些东西提交到了合成分支,但现在我意识到我更愿意将该更改应用于特定于该特性的一个分支。是否有一种方法可以使用git进行撤销/应用到其他地方的操作?

2个回答

41

将某个提交选取并应用到目标分支,并重置源分支。假设您想要将source分支中的最新提交移动到target分支,执行以下操作:

git checkout target
git cherry-pick source
git checkout source
git reset --hard source^
如果提交不是最后一个,你需要使用 git rebase -i 命令,而不是上一个命令,并选择特定的提交名称进行 cherry-pick

8
注意,重置(reset)/ 变基(rebase)都会进行历史记录重写,因此如果历史记录已发布,则不应使用它们 - 那么您将不得不使用git-revert。 - Jakub Narębski

2
通常,当我做类似这样的事情时,我会遵循以下步骤:
  1. 使用 git diff 创建一个反向补丁文件(例如 git diff HEAD^ HEAD
  2. 将此反向补丁应用于我想要从中删除更改的分支。
  3. 检出我想要更改的分支
  4. 使用 git cherry-pick 应用适用的提交
我相信有一种更简单的方法,但我更喜欢这种方法,因为我更熟悉并记得 diff/cherry-pick 命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接