如何在没有整个分支的情况下仅重新进行两次提交?

时间:2016-08-22 17:00:14

标签: git

我不小心犯了一个错误的分支。图表看起来像这样

a

我想将C和D移动到主人而没有A和B的变化。我希望图表看起来像这样

----o--o-----o (master)
     \
      \
       A--B--C--D (feature)
这可能吗?以及如何在遥控器上做到这一点?

A和B的变化不会合并,所以我不在乎提交是否会丢失

2 个答案:

答案 0 :(得分:8)

警告:以下git命令将重写feature分支的历史记录。 git rebasegit reset是危险的,因为它可能对使用feature分支的其他任何人造成严重破坏。

首先在与other_feature相同的提交中创建分支feature

git checkout -b other_feature feature

将前两次提交重新定位到master

git rebase --onto master HEAD~2

结帐feature

git checkout feature

feature重置为您想要的提交。

git reset --hard HEAD~2

答案 1 :(得分:2)

以下答案假定您的feature分支已发布到遥控器。我只想从C分支中选择提交Dfeaturemaster分支,然后在feature上恢复这两个提交:

git checkout master
git checkout -b other_feature
git cherry-pick <SHA-1 for C>
git cherry-pick <SHA-1 for D>

git checkout feature
git revert <SHA-1 for C>
git revert <SHA-1 for D>