如何显示精心挑选的提交的冲突解决方案?
How to display the conflict resolution of a cherry-picked commit?
如果提交是精心挑选的并且需要解决冲突:
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)以弄清楚冲突是如何解决的?
一种方法是重做 cherry-pick 以重现冲突。
- git结帐 7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
- git cherry-pick -n 1d9e4ac2e2bedfd40ee2d91a4a6098150af9b5df
-n
表示不提交,因此您可以在完成检查后丢弃工作。
下次解决冲突时使用内置 git rerere
命令。
rerere= Re使用了Re有线Re解决方案。它会像补丁一样记录你解决冲突的方式,然后你可以简单地查看输出。
here有详细的post介绍。
原始提交和精心挑选的提交之间的差异(包括冲突解决)可以显示为:
commit=7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
picked_from=$(git show --no-patch --pretty=%b $commit |
perl -ne 'print if(s/.*cherry picked from commit (\w+).*//)')
diff -u --ignore-matching-lines '^[^+-]' \
<(git show $picked_from) <(git show $commit)
原始提交的 SHA 是从精心挑选的提交消息中提取的。 diff 比较删除的行和添加的行(即仅以 + 或 - 开头的行)。它消除了由 @@ 开头的 hunks 边界或不重要的提交消息正文引入的噪音。它会显示类似:
--- /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`
+ *
如果提交是精心挑选的并且需要解决冲突:
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)以弄清楚冲突是如何解决的?
一种方法是重做 cherry-pick 以重现冲突。
- git结帐 7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
- git cherry-pick -n 1d9e4ac2e2bedfd40ee2d91a4a6098150af9b5df
-n
表示不提交,因此您可以在完成检查后丢弃工作。
下次解决冲突时使用内置 git rerere
命令。
rerere= Re使用了Re有线Re解决方案。它会像补丁一样记录你解决冲突的方式,然后你可以简单地查看输出。
here有详细的post介绍。
原始提交和精心挑选的提交之间的差异(包括冲突解决)可以显示为:
commit=7b8e5c99a4a40ae788ad29e36b0d714f529b12eb
picked_from=$(git show --no-patch --pretty=%b $commit |
perl -ne 'print if(s/.*cherry picked from commit (\w+).*//)')
diff -u --ignore-matching-lines '^[^+-]' \
<(git show $picked_from) <(git show $commit)
原始提交的 SHA 是从精心挑选的提交消息中提取的。 diff 比较删除的行和添加的行(即仅以 + 或 - 开头的行)。它消除了由 @@ 开头的 hunks 边界或不重要的提交消息正文引入的噪音。它会显示类似:
--- /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`
+ *