如何显示樱桃挑选提交的冲突解决方案?

时间:2015-02-14 22:31:27

标签: git cherry-pick

如果一个提交被挑选出来并且需要解决冲突:

commit 7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
Author: John Spray 
Date:   Tue May 20 16:25:19 2014 +0100
...
    Signed-off-by: John Spray 
    (cherry picked from commit 1d9e4ac2e2bedfd40ee2d91a4a6098150af9b5df)
    Conflicts:
        src/crush/CrushWrapper.h

有没有办法显示两个提交之间的差异(即上例中的1d9e4ac和7b8e5c),以确定冲突是如何解决的?

3 个答案:

答案 0 :(得分:2)

一种方法是重做樱桃选择以重现冲突。

  • git checkout 7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
  • git cherry-pick -n 1d9e4ac2e2bedfd40ee2d91a4a6098150af9b5df

-n说没有提交,所以当你完成检查工作时,你可以把它丢掉。

答案 1 :(得分:0)

下次解决冲突时,请使用内置git rerere命令 rerere = 重新使用重新有线重新解决方案。它将记录您解决冲突的方式,如补丁,然后您只需查看输出。

here 是关于它的详细信息。

答案 2 :(得分:0)

原始提交和包含冲突解决方案的挑选提交之间的差异可以显示为:

commit=7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
picked_from=$(git show --no-patch --pretty=%b $commit  | 
  perl -ne 'print if(s/.*cherry picked from commit (\w+).*/$1/)')
diff -u --ignore-matching-lines '^[^+-]' \
   <(git show $picked_from) <(git show $commit)

从提取的提交消息中提取原始提交的SHA。差异比较删除的行和添加的行(即仅以 + - 开头的行)。它摆脱了以 @@ 开头的黑客边界或不重要的提交消息体引入的噪音。它将显示如下内容:

--- /dev/fd/63  2015-02-13 13:27:08.612683558 +0100
+++ /dev/fd/62  2015-02-13 13:27:08.616683527 +0100
@@ -62,13 +57,24 @@
  }

 diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h
-index 0113662..282cbeb 100644
+index 3b2e6e6..0a633a5 100644
 --- a/src/crush/CrushWrapper.h
 +++ b/src/crush/CrushWrapper.h
-@@ -874,6 +874,25 @@ public:
-     return false;
+@@ -863,6 +863,36 @@ public:
+     if (!crush) return -1;
+     return crush_find_rule(crush, ruleset, type, size);
    }
- 
++
++  bool ruleset_exists(int const ruleset) const {
++    for (size_t i = 0; i < crush->max_rules; ++i) {
++     if (crush->rules[i]->mask.ruleset == ruleset) {
++       return true;
++     }
++    }
++
++    return false;
++  }
++
 +  /**
 +   * Return the lowest numbered ruleset of type `type`
 +   *