Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 把樱桃摘到另一个树枝上_Git_Branch_Cherry Pick - Fatal编程技术网

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 repo克隆到临时目录
  • 在克隆中完成工作
  • 将克隆添加为远程克隆
  • 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"