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
)所有您不想携带的提交。