Предположим, что граф фиксации похож на
* b73f9ac (HEAD -> feature_account) f
* 5e77f54 e
* f6e5be0 d
| * c96a113 (master) c
| * f8132ea b
|/
* bae8722 a
* 762077a initial commit
В git rebase -i master
новая база - master
.Но в вашем случае новая база должна быть bae8722
, которая является точкой разветвления и ближайшим общим предком.Может быть расположен git merge-base feature_account master
.В некоторых более сложных ситуациях git merge-base
может не работать должным образом, и вам нужно выяснить это другими способами.
Чтобы явно указать новую базу, мы можем использовать --onto <newbase>
,
git rebase -i --onto $(git merge-base feature_account master) master
или с краткой формой
git rebase -i --onto feature_account...master master
А затем в редакторе измените «pick» в строках, кроме первой, на «s».Сохранить и выйти.Отредактируйте сообщение о коммите и сделайте.
Чтобы раздавить новые коммиты на feature_account
, есть другой метод.
git checkout feature_account
# make the working tree clean if it's not
git stash -u
# here "feature_account...master" cannot be used
git reset $(git merge-base feature_account master) --soft
git commit
# restore the stashed changes if necessary
git stash apply --index