繁体   English   中英

变基单个 Git 提交

[英]Rebase a single Git commit

有没有办法将单个提交从一个分支变基到另一个分支?

我有这个分支结构:

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

我想要做的就是将Feature-branch的最后一次提交 rebase 到 master 和回滚Feature-branch一次提交。

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

我怎么做?

你可以挑选 XX 来掌握。

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

并使用 git reset 从功能分支中删除最后一次提交。

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

这表示“在 master 分支的顶端重新设置 last-before-branch 和分支(即 XX 提交)之间的提交范围”

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

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

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

所以樱桃采摘是一个更简单的解决方案......

其实做起来很简单。 解决方案是进行交互式变基并“删除”您不想包含在变基中的所有提交。

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

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

@Charles 的回答是正确的。 无论如何,我最终使用了很多次,最重要的是在项目上重新设置特定配置

  * a8f9182 (HEAD -> production) production configuration
  | * daa18b7 (pre) preproduction configuration
  |/  
  | * d365f5f (local) local configuration
  |/  
  * 27d2835 (dev) amazing new feature that will save the world
* | 56d2467 (master) boring state of the art for project
|/

我为它创建了一个新命令:

$ cat ~/bin/git-rebaseshot 
COMMIT=$1
DEST=${2:-HEAD}
git rebase ${COMMIT}^ ${COMMIT} --onto $DEST

通常你想为该命令自动完成分支名称,所以添加它采购这个功能(添加到.bashrc 或.profile):

_git_rebaseshot () 
{ 
    __gitcomp_nl "$(__git_refs)"
}

git autocomplete 会搜索它

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

# 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) BBDD config
* a8f9182 (local) local config
* a8f9182 (debug) log level config
* a8f9182 (dev) new feature
|

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

无论如何,此命令将适用于您提供的任何 sha/ref:

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

有没有办法将一个分支的单个提交重新绑定到另一个分支?

我有这个分支结构:

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

我想要做的就是将Feature-branch的最后一次提交重新设置为 master 并回滚Feature-branch一次提交。

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

我怎么做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM