我想知道是否有办法将一个提交复制到另一个分支而不检查该分支。
例如,我有两个分支:master
和parallel_version
。
我在parallel_version
分支上,我在这些分支的常见文件中发现了一个错误。
我已修好并承诺。如何将此提交复制到另一个分支,假设我正在使用git-svn?
通常我会这样做:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
有更好的方法吗?
答案 0 :(得分:8)
这是不可能的 - 简单地想象如果存在无法自动解决的冲突会发生什么。出于同样的原因,您也无法更新当前未签出的分支(即使可以快进)。
答案 1 :(得分:5)
https://github.com/lennartcl/gitl提供" git cherry-copy"和" git cherry-move"执行此操作并处理大多数极端情况的脚本。
答案 2 :(得分:1)
疯狂的想法(基于 mnaoumov 评论)如果你真的想避免触及已检出的文件(比如说你不想打扰你的构建系统)......无论如何,这就是我想要的。
git fetch clone && git branch mybranch clone/mybranch -f
这将是一个自动化的事情。如果你有文件系统快照,克隆整个仓库很便宜 - 毕竟可能不那么疯狂......
答案 3 :(得分:1)
这是一个小脚本,用于创建存储库的临时克隆,如suggested by user2394284:
/ usr / bin / git-tmp-clone 或〜/ bin / git-tmp-clone
#!/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上对我有用。)
您可以用它来挑选例如通过运行
将当前分支上的最后一次提交提交到另一个分支git-tmp-clone "git checkout TARGET_BRANCH
&& git cherry-pick $(git rev-parse --short @)
&& git push origin HEAD"
(请注意,在此示例中,在创建克隆之前,已在 origin 存储库中对rev-parse
进行了评估!这就是为什么它指向最新的提交。根据需要进行调整的原因。)