如何从一个分支移动(未按下)提交到另一个分支

时间:2016-06-17 02:33:55

标签: git

我在branch-x并且进行了一些更改并提交了它们(但没有推送)。虽然提交是正确的,但它们不应该在branch-x中进行,而应在branch-y进行。如何从branch-x获取提交并将其应用于branch-y。我想避免从branch-x推送已提交的更改。

以下是我在命令中所做的。

(branch-x)$: git status
(branch-x)$: git add .
(branch-x)$: git commit -m "some commit"
<oops, I should have made these changes in branch-y>
(branch-x)$: git checkout -b branch-y
(branch-y)$: <how can I take the commit from branch-x and apply it here?>

2 个答案:

答案 0 :(得分:4)

由于您已经通过git checkout -b branch-y创建了所需的分支,并且此新分支具有您想要的提交,因此唯一剩下的问题是branch-x提示上的额外恶意提交。由于您尚未发布branch-x,因此您应该可以安全地重写该历史记录。这样做:

git checkout branch-x    # switch back to branch-x
git reset --hard HEAD~1  # nuke the rogue commit on the tip of this branch

答案 1 :(得分:1)

一种可能的解决方案是使用git cherry-pick。假设我们有这样的提交图。

A-B-C-D-E->branch-x
M-N->branch-y

现在你希望CDE在分支上。

git checkout branch-y
git cherry-pick C D E

git cherry-pick C^..E

我们得到了

M-N-C'-D'-E'->branch-y

另一种可能的解决方案是使用git rebase

git rebase --onto branch_y C^ E
git branch -d branch_y
git checkout -b branch_y