Git 把樱桃摘到另一个树枝上
我想知道是否有办法将一个提交复制到另一个分支而不签出该分支 例如,我有两个分支:Git 把樱桃摘到另一个树枝上,git,branch,cherry-pick,Git,Branch,Cherry Pick,我想知道是否有办法将一个提交复制到另一个分支而不签出该分支 例如,我有两个分支:master和parallel\u version 我在parallel\u version分支上,在这些分支的公共文件中发现了一个bug 我已经把它修好并承诺了。假设我使用git svn,如何将此提交复制到另一个分支 通常我会: $ git checkout master $ git cherry-pick parallel_version $ git checkout parallel_version 有更好的
master
和parallel\u version
我在parallel\u version
分支上,在这些分支的公共文件中发现了一个bug
我已经把它修好并承诺了。假设我使用git svn,如何将此提交复制到另一个分支
通常我会:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
有更好的方法吗?这是不可能的-想象一下如果发生无法自动解决的冲突会发生什么。出于同样的原因,您也无法更新当前未签出的分支(即使可以进行快进)。提供了“git cherry copy”和“git cherry move”脚本,用于执行此操作并处理大多数转角情况 疯狂的想法(基于mnaoumov的评论)如果你真的想避免接触签出的文件(比如说你不想干扰你的构建系统)…这就是我想要的
git-fetch-clone&&git-branch-mybranch-clone/mybranch-f
这将是一件自动化的事情。如果您有文件系统快照,那么克隆整个repo是很便宜的—也许根本没有那么疯狂…下面是一个创建存储库临时克隆的小脚本,如下所示: /usr/bin/git tmp克隆或~/bin/git tmp克隆
#/bin/bash
gitTopLevel=$(git版本解析--显示toplevel)
#临时克隆的唯一名称。
totalhash=$(tar-c“$gitTopLevel/.git”2>/dev/null | sha256sum | head-c8)
tmprep=“/tmp/$(basename$(pwd))${totalhash}”
git克隆“$gitTopLevel”${tmprep}
#在克隆中启动交互式shell。通过任何
#参数作为要执行的初始命令。
/bin/bash——可以使用以下命令更新其他分支的init文件:git fetch origin&git branch mybranch origin/mybranch-f@mnaoumov更简单的是:git fetch:
“在当前实现中不可能”,是的。“不值得费心去正确地实施它”——也许吧。但一个潜在的无法解决的冲突并不是一个很好的论据:在这种情况下,cherry pick应该在不更改工作目录或回购状态的情况下失败。看起来“git cherry copy”只是自动执行OP概述的3个手动步骤。因此,它与@ThiefMaster并不矛盾。我希望在编译当前分支时“稍后”复制提交分支。这并不顺利……在这种情况下,最好使用git-worktree
而不是克隆。它不会复制整个.git
,这实际上是一个很好的黑客。对于小型ish项目来说,效率低下应该无关紧要。与其将tmp克隆添加为远程,您只需将其从克隆推送到源位置即可–FFD推送到远程上未签出的分支毕竟没有问题。
git-tmp-clone "git checkout TARGET_BRANCH
&& git cherry-pick $(git rev-parse --short @)
&& git push origin HEAD"