我不知道是否有复制一个承诺的另一个分支,而不检查出该分支的方式。
例如,我有两个分支: master
和parallel_version
。
我在parallel_version
分支,我发现文件中的错误常见的这些分支。
我已经固定它和承诺。 如何复制此承诺到另一个分支,假设我使用Git SVN?
通常情况下,我会做:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
有没有更好的这样做的方法是什么?
这是不可能的 - 简单地想象一下,如果有不能被自动解决的冲突会发生什么。 出于同样的原因,你也不能更新当前未签出(即使快进是可能的)的分支。
https://github.com/lennartcl/gitl提供“混帐樱桃拷贝”和“混帐樱桃移动”脚本做到这一点,处理大部分的极端案例。
疯狂的想法(基于mnaoumov的评论),如果你真的想避免触及签出的文件(比如你不想打扰你的编译系统)......这就是我想反正。
- 克隆整个混帐回购到一个临时目录。
- 不要在克隆工作。
- 添加克隆作为一个遥控器。
-
git fetch clone && git branch mybranch clone/mybranch -f
- 清理。
这将是自动的事情。 如果你有文件系统快照,克隆整个回购便宜 - 也许毕竟不是那么疯狂?
下面是一个创建库的临时副本,作为一个小剧本由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
在创建克隆之前的原点库评价过!这就是为什么它指向最近的提交。根据需要适应。)