我通常使用以下 git 命令来挑选一系列 gerrits ..不,我如何排除介于两者之间的几个 gerrits .. 可以修改下面的命令,还是有一个我们可以选择一系列 gerrits 并排除我们的想..
git cherrypick fromgerritSHA1..togerritSHA1
我通常使用以下 git 命令来挑选一系列 gerrits ..不,我如何排除介于两者之间的几个 gerrits .. 可以修改下面的命令,还是有一个我们可以选择一系列 gerrits 并排除我们的想..
git cherrypick fromgerritSHA1..togerritSHA1
您可以指定多个范围:
git cherry-pick A..B C..D E..F
甚至是特定的提交:
git cherry-pick A B C D E F
如果您有很多要排除的提交,那么做这样的事情可能会更容易(有点像穷人的git rebase -i
for git cherry-pick
):
git log --pretty=oneline A..F | tac > tempfile.txt
< edit tempfile.txt to remove the commits you don't want >
git cherry-pick $(awk '{print $1}' tempfile.txt)
编辑:向tac
日志添加了建议,因为git cherry-pick
希望以与生成的顺序相反的顺序查看提交git log
(也可以使用git log --reverse ...
)。
不确定您是否可以将单个提交拉出范围abcdef..123456
。Git 范围语法在gitrevisions的文档中进行了解释,它看起来不像那样工作。不过,还有另一种方法可以仅使用范围哈希和要排除的哈希来获得所需的内容。
fromgerritSHA1..togerritSHA1
假设您不想要的范围内的两个哈希是skiphash1
and skiphash2
,请尝试:
$ git rev-list --reverse fromgerritSHA1..togerritSHA1 | grep -vE 'skiphash1|skiphash2' | git cherry-pick --stdin
git rev-list --reverse fromgerritSHA1..togerritSHA1
打印出 range 中的提交哈希fromgerritSHA1..togerritSHA1
,一次一行。--reverse
需要以正确的顺序列出cherry-pick的哈希值。
grep -vE 'skiphash1|skiphash2'
从列表中删除您不想要的两个哈希。您可以添加更多要跳过的哈希,只需将它们用|
.
最后,仅将您想要的提交哈希列表传递给git cherry-pick --stdin
.
如果您在像下面这样的樱桃挑选过程中遇到问题,请尝试选择比您原来的尝试更早的开始哈希值。
git cherry-pick a005efa..1ece685
[temp_4454kjerer3233 3520dd4] 3. xxx.
1 file changed, 9 insertions(+)
[temp_4454kjerer3233 791cec5] 4. xxx.
3 files changed, 19 insertions(+)
[temp_4454kjerer3233 2e95364] 5. xxx.
2 files changed, 21 insertions(+)
[temp_4454kjerer3233 59e38b9] 6. xxx.
3 files changed, 61 insertions(+)
error: could not apply a3b0c6b... 7. xxx.
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'