rebase-merges: try and use branch names as labels
When interactively rebasing merge commits, the commit message is parsed to extract a probably meaningful label name. For instance if the merge commit is “Merge branch 'feature0'”, then the rebase script will have thes lines: ``` label feature0 merge -C $sha feature0 # “Merge branch 'feature0' ``` This heuristic fails in the case of octopus merges or when the merge commit message is actually unrelated to the parent commits. An example that combines both is: ``` *---. 967bfa4 (HEAD -> integration) Integration |\ \ \ | | | * 2135be1 (feature2, feat2) Feature 2 | |_|/ |/| | | | * c88b01a Feature 1 | |/ |/| | * 75f3139 (feat0) Feature 0 |/ * 25c86d0 (main) Initial commit ``` yields the labels Integration, Integration-2 and Integration-3. Fix this by using a branch name for each merge commit's parent that is the tip of at least one branch, and falling back to a label derived from the merge commit message otherwise. In the example above, the labels become feat0, Integration and feature2. Signed-off-by: Nicolas Guichard <nicolas@guichard.eu> Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
68c9fcb027
commit
436892123d
@ -108,19 +108,19 @@ test_expect_success 'generate correct todo list' '
|
||||
|
||||
reset onto
|
||||
pick $b B
|
||||
label E
|
||||
label first
|
||||
|
||||
reset onto
|
||||
pick $c C
|
||||
label branch-point
|
||||
pick $f F
|
||||
pick $g G
|
||||
label H
|
||||
label second
|
||||
|
||||
reset branch-point # C
|
||||
pick $d D
|
||||
merge -C $e E # E
|
||||
merge -C $h H # H
|
||||
merge -C $e first # E
|
||||
merge -C $h second # H
|
||||
|
||||
EOF
|
||||
|
||||
@ -462,11 +462,11 @@ test_expect_success 'A root commit can be a cousin, treat it that way' '
|
||||
'
|
||||
|
||||
test_expect_success 'labels that are object IDs are rewritten' '
|
||||
git checkout -b third B &&
|
||||
git checkout --detach B &&
|
||||
test_commit I &&
|
||||
third=$(git rev-parse HEAD) &&
|
||||
git checkout -b labels main &&
|
||||
git merge --no-commit third &&
|
||||
git merge --no-commit $third &&
|
||||
test_tick &&
|
||||
git commit -m "Merge commit '\''$third'\'' into labels" &&
|
||||
echo noop >script-from-scratch &&
|
||||
|
Reference in New Issue
Block a user