Моя цель - избавиться от старых коммитов в этой ветке, перебазировать ветку функций на текущем мастере и применить мои новые коммиты, которые находятся на моей локальной ветке мастера.
Я думаю, что первое, что нужно сделать, это прояснить ситуацию. Если вы удалили коммиты из функциональной ветки, то перебрасывать нечего. rebase
это то, что вы делаете для совершения; это означает «сделать коммит (обычно с другим родителем, чем старый коммит), чей патч относительно его родителя такой же, как патч старого коммита относительно его родителя».
Когда люди говорят, что они перебазируют ветвь, они означают, что они перебазируют коммит (ы) с конца этой ветки, а затем перемещают ветку к новым копиям коммитов.
И, если честно, вы можете используйте команду rebase без переписывания каких-либо коммитов, в этом случае она просто перемещает ветку - это удобно в тех случаях, когда вам не нужно беспокоиться о том, есть ли какие-либо коммиты для перезаписи или нет.
Но все же стоит разобраться в этих деталях, потому что если вы понимаете, что просто хотите переместить ветку без каких-либо коммитов, есть более простые способы сделать это. (Вам даже не нужно явно удалять старые коммиты; хорошо просто оставить их при перемещении ветви, если они на самом деле больше не нужны.)
Единственное предостережение в том, что если вы удалите ветку старые коммиты из ветви (будь то путем перебазирования - который заменяет эти коммиты новыми копиями - или просто перемещая ветку или любым другим способом), тогда все другие репо должны иметь дело с условием «восходящая перебазировка» (см. git перебазировать документы) и, если они сделают это неправильно, они могут отменить вашу работу.
При этом самое простое - заменить команду checkout -b
на branch -f
, то есть вместо создания ветвь, заставить его двигаться. С проверкой новой фиксации (как это было бы для checkout -b
):
git branch -f myFeatureBranch
git push -f
# all other clones must now recover from upstream rebase