我在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?>
答案 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