git rebase一个提交

有没有一种方法来重新分配一个单一的提交到另一个分支?

所以我有

-- -- -- -- -- (Master) \ -- -- -- -- -- XX (Feature-branch) 

我所要做的就是将Feature-branch的最后一次提交重新分配到主机和回滚特性分支一次提交。

 -- -- -- -- -- XX (Master) \ -- -- -- -- -- (Feature-branch) 

我怎么做?

你可以挑选XX来掌握。

 git checkout master git cherry-pick <commit ID of XX> 

用git reset从function分支中删除最后一个提交。

 git checkout Feature-branch git reset --hard HEAD^ 
 git rebase --onto master branch~1 branch 

这就是说“重新设定master分支前端分支和分支之间的提交范围(也就是XX提交)”

在此操作之后, branch提示在提交XX上移动,因此您要将其设置回来

 git checkout branch git reset --hard branch@{1}^ 

其中说“重新设置分支提示之前的状态提交”

所以樱桃是一个更简单的解决scheme…

@Charles的回应是正确的。 无论如何,我最终使用了这么多次,最重要的是重新设置项目的特定configuration

   * a8f9182(HEAD  - >生产)生产configuration
   |  * daa18b7(预)预生产configuration
   | /  
   |  * d365f5f(本地)本地configuration
   | /  
   * 27d2835(开发)惊人的新function,将拯救世界
 * |  56d2467(主)无聊的项目的艺术状态
 | /

我为它创build了一个新的命令:

 $ cat〜/ bin / git-rebaseshot 
 COMMIT = $ 1
 DEST = $ {2:-head}
 git rebase $ {COMMIT} ^ $ {COMMIT}  -  $ DEST

通常情况下,您希望为该命令自动完成分支名称,因此请添加此函数(添加到.bashrc或.profile中):

 _git_rebaseshot() 
 { 
     __gitcomp_nl“$(__ git_refs)”
 }

git自动完成将search它

你可以像这样使用这个命令:

 # rebase config on prepro on actual HEAD $ git rebaseshot prepro # rebase config on local onto dev $ git rebaseshot local dev # rebase production config on master $ git rebaseshot pro master 

当你正确地划分特征时,可能性是无止境的。

 * a8f9182(HEAD  - > postgres)BBDDconfiguration
 * a8f9182(本地)本地configuration
 * a8f9182(debugging)日志级别configuration
 * a8f9182(dev)新function
 |

我想这就是被子喜欢做的事情。

这个命令无论如何都可以用你提供的任何sha / ref来工作:

 $ git rebaseshot <Feature branch> master $ git rebaseshot <commit of XX> master 

实际上很简单。 解决scheme是做一个交互式的重新组织,并“放弃”你不想包含在rebase中的所有提交。

git rebase -i <target_branch>其中target_branch是你想要分支的分支

然后,您将编辑打开的文件,并pick您想要的提交,并drop (或简称为d )所有您不想携带的提交。