git的樱桃挑选到另一个分支(git cherry-pick to another branch)

2019-07-05 07:03发布

我不知道是否有复制一个承诺的另一个分支,而不检查出该分支的方式。

例如,我有两个分支: masterparallel_version

我在parallel_version分支,我发现文件中的错误常见的这些分支。

我已经固定它和承诺。 如何复制此承诺到另一个分支,假设我使用Git SVN?

通常情况下,我会做:

$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version

有没有更好的这样做的方法是什么?

Answer 1:

这是不可能的 - 简单地想象一下,如果有不能被自动解决的冲突会发生什么。 出于同样的原因,你也不能更新当前未签出(即使快进是可能的)的分支。



Answer 2:

https://github.com/lennartcl/gitl提供“混帐樱桃拷贝”和“混帐樱桃移动”脚本做到这一点,处理大部分的极端案例。



Answer 3:

疯狂的想法(基于mnaoumov的评论),如果你真的想避免触及签出的文件(比如你不想打扰你的编译系统)......这就是我想反正。

  1. 克隆整个混帐回购到一个临时目录。
  2. 不要在克隆工作。
  3. 添加克隆作为一个遥控器。
  4. git fetch clone && git branch mybranch clone/mybranch -f
  5. 清理。

这将是自动的事情。 如果你有文件系统快照,克隆整个回购便宜 - 也许毕竟不是那么疯狂?



Answer 4:

下面是一个创建库的临时副本,作为一个小剧本由user2394284建议 :

的/ usr /斌/ GIT-TMP-克隆〜/斌/ GIT-TMP-克隆

#!/bin/bash

# Unique name for the temporary clone.
totalhash=$(tar -c $(git rev-parse --show-toplevel)/.git | sha256sum | head -c8)

tmprepo="/tmp/$(basename $(pwd))_${totalhash}"

git clone . ${tmprepo}

# Start an interactive shell in the clone. Pass any
# arguments as initial commands to be executed.
/bin/bash --init-file <(echo "cd ${tmprepo}; $@")

# Clean up the clone.
rm -rf ${tmprepo} && echo "Deleted ${tmprepo}"

(这个脚本是小于强劲,但它似乎为我工作在Ubuntu。)

你可以用它来摘樱桃例如,最后提交对当前BRACH到另一个分支,通过运行

git-tmp-clone "git checkout TARGET_BRANCH
            && git cherry-pick $(git rev-parse --short @)
            && git push origin HEAD"

(请注意,在这个例子中, rev-parse在创建克隆之前的原点库评价过!这就是为什么它指向最近的提交。根据需要适应。)



文章来源: git cherry-pick to another branch