git cherry pick - 提交范围,并在其间排除一些

时间:2013-03-28 16:35:59

标签: git github gerrit repository

我通常使用以下git命令来解释一系列的gerrits ..我怎么能在两者之间排除几个gerrits ..可以修改下面的命令,或者是否有一个我们可以选择一系列gerrits并排除我们想要的......

git cherrypick fromgerritSHA1..togerritSHA1

3 个答案:

答案 0 :(得分:40)

您可以指定多个范围:

git cherry-pick A..B C..D E..F

甚至是特定的提交:

git cherry-pick A B C D E F

如果你想要排除很多提交,那么做这样的事情可能会更容易(有点像穷人的git rebase -i 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 ...)。

答案 1 :(得分:3)

不确定是否可以从abcdef..123456范围内提取单个提交。 Git范围语法在gitrevisions的文档中进行了解释,它看起来并不像那样。尽管如此,还有另一种方法可以仅使用范围哈希和要排除的范围来获得所需的内容。

假设您不想要的范围fromgerritSHA1..togerritSHA1中的两个哈希值为skiphash1skiphash2,请尝试:

$ git rev-list --reverse fromgerritSHA1..togerritSHA1 | grep -vE 'skiphash1|skiphash2' | git cherry-pick --stdin

git rev-list --reverse fromgerritSHA1..togerritSHA1打印出范围fromgerritSHA1..togerritSHA1中的提交哈希值,一次一行。需要--reverse来按照樱桃选择的正确顺序列出哈希值。

grep -vE 'skiphash1|skiphash2'从列表中删除您不想要的两个哈希值。您可以添加更多哈希值来跳过,只需将它们与|分开即可。

最后,只有你想要的提交哈希值列表传递给git cherry-pick --stdin

答案 2 :(得分:1)

如果你在下面的挑选中遇到问题,请尝试选择之前的哈希值,而不是原来的尝试。

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'