Я наблюдал странное поведение при использовании git rebase между проектами, которые я клонировал и редактировал впоследствии.
Я использую git rebase, чтобы применить изменения из шаблонов проектов к клонированным проектам. В большинстве случаев у меня нет проблем, и если я сталкиваюсь с конфликтом, я могу решить его вручную. Но недавно я обнаружил, что даже если нет конфликта, в редких случаях ребаз применялся к родителю ветки HEAD, я хотел, чтобы ребаз применялся.
У меня есть следующий конец главной ветви:
* 5a42f4b (master) commit 3 - successful rebased from template
* d9ef9ba (tag: online, backup/master) commit 2 - imported into template
* 11acd0e commit 1
...
и у меня есть ветка удаленного отслеживания из моего шаблона:
* b2f423e (HEAD, template/master) commit 6
* 2152143 commit 5
* 0535e9a commit 4
* 68e1fd2 commit 3
* b7416ef commit 2 - rebased from edited clone
...
Теперь я хочу перебазировать коммит 5 на мастер и использовать
git rebase -i --onto master 0535e9a 2152143
Я разрешаю конфликт вручную и получаю новое дерево:
* ba002d4 (HEAD) commit 5 - rebased from template
* d9ef9ba (tag: online, backup/master) commit 2 - imported into template
* 11acd0e commit 1
...
но это не то, что я хотел, поэтому я перебазирую снова:
git rebase -i --onto master d9ef9ba ba002d4
на этот раз я даже не получаю конфликт, потому что конфликт уже разрешен из-за более ранней фиксации, и получаю:
* ca7d80b (HEAD) commit 5 - successful rebased from template
* 5a42f4b (master) commit 3 - successful rebased from template
* d9ef9ba (tag: online, backup/master) commit 2 - imported into template
* 11acd0e commit 1
...
так что, по крайней мере, я достиг своей цели, но я действительно не могу найти объяснение, почему первый ребаз не работал так, как задумано.
Есть намеки?