Reintegrate: sometimes a specific cherry-pick need to be carried forward
This is especially necessary when you reverted a premature merge to more stable integration branch while you do want to keep the topic cooking in more experimental integration branch.
Junio C Hamano committed
Feb 13, 2009 at 16:56 UTC
dc27452ae4adbb1df89166b6ac1dcaefd38a2e3f
1 file changed
+29
-11
Reintegrate
+29
-11
@@ -10,25 +10,43 @@ echo '#!/bin/sh
10
while read branch eh
11
do
12
case "$eh" in
13
- "") git merge "$branch" || break ;;
14
- ?*) echo >&2 "Eh? $branch $eh"; break ;;
13
+ "")
14
+ echo >&2 "* $branch"
15
+ git merge "$branch" || break ;;
16
+ pick" "*)
17
+ echo >&2 "* $eh"
18
+ git cherry-pick "$branch" || break ;;
19
+ *) echo >&2 "Eh? $branch $eh"; break ;;
20
esac
21
done <<EOF'
22
23
+show_merge () {
24
+ branch=$(expr "$msg" : "$merge_msg") &&
25
+ tip=$(git rev-parse --verify "refs/heads/$branch" 2>/dev/null) &&
26
+ merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) &&
27
+ merged=$(expr "$merged" : "$x40 \(.*\)") &&
28
+ test "$merged" != undefined || {
29
+ other=$(git log -1 --pretty='format:%s' $other) &&
30
+ merged="$branch :rebased? $other"
31
+ }
32
+}
33
+
34
+show_pick () {
35
+ merged="$(git rev-parse --verify "$commit") pick $msg"
36
+}
37
+
38
git log --pretty=oneline --first-parent "$1" |
39
{
40
series=
41
while read commit msg
42
do
23
- other=$(git rev-parse --verify "$commit^2") &&
24
- branch=$(expr "$msg" : "$merge_msg") &&
25
- tip=$(git rev-parse --verify "refs/heads/$branch" 2>/dev/null) &&
26
- merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) &&
27
- merged=$(expr "$merged" : "$x40 \(.*\)") &&
28
- test "$merged" != undefined || {
29
- other=$(git log -1 --pretty='format:%s' $other) &&
30
- merged="$branch :rebased? $other"
31
- }
43
+ if other=$(git rev-parse -q --verify "$commit^2")
44
+ then
45
+ show_merge
46
+ else
47
+ show_pick
48
+ fi
49
+
50
if test -z "$series"
51
then
52
series="$merged"