Я пытаюсь настроить порядок топологической фиксации в git так, чтобы второй родитель отображался только тогда, когда такого первого родителя не было.
Вот скрипт для настройки:
touch a
git add a
git commit -m "a"
git checkout -b feature_b
touch b
git add b
git commit -m "b"
git checkout master
echo "1" > a
git commit -am "a1"
git checkout feature_b
git merge --no-ff -m "master to feature_b" master
git checkout master
git merge --no-ff -m "feature_b to master" feature_b
, что приводит к
$ git log --graph --abbrev-commit --format=oneline
* 697e92f (HEAD -> master) feature_b to master
|\
| * 2eaef1a (feature_b) master to feature_b
| |\
| |/
|/|
* | 2f83cbf a1
| * c4aa6df b
|/
* d8f1101 a
Вопрос в том, как указать git перечислить коммит "b" перед "a1"?
Чтобы вывод выглядел так
* 697e92f (HEAD -> master) feature_b to master
|\
| * 2eaef1a (feature_b) master to feature_b
| |\
| * c4aa6df b
| | |
| |/
|/|
* | 2f83cbf a1
|/
* d8f1101 a
Причина, по которой я спрашиваю, состоит в том, что довольно часто происходит слияние назад и форсирование между ветвями master и release. И кажется более удобным не переупорядочивать коммиты, если это возможно. Более того, первый коммит "697e92f" явно заявляет, что "2eaef1a" идет после "2f83cbf". А поскольку «c4aa6df» является частью «2eaef1a», они должны отображаться вместе.
Пробовал разные варианты git, но либо у него его нет, либо я что-то упустил.