Удалить потраченную впустую фиксацию в нашей удаленной ветке функций

#git

#git

Вопрос:

У меня есть это дерево

 * commit origin/master
| * commit origin/my-feature-branch
| * commit 
| * commit 
| * commit 
|/  
| * commit origin/other-feature-branch
|/
 

Я хочу сохранить origin/master , но я хочу раздавить origin/my-feature-branch и сделать его чистым. Моя «стратегия» такова:

 git checkout my-feature-branch
git rebase -i HEAD~4
# ... leave first pick line and change all others in squash
# ... change commit messages into one
git push origin :my-feature-branch
git push origin my-feature-branch
 

Мое новое дерево теперь чистое.

 * commit origin/master
| * commit origin/my-feature-branch
|/  
| * commit origin/other-feature-branch
|/
 

Это правильный способ?

Комментарии:

1. Это изменяет общие коммиты, что почти всегда является плохой идеей для Git. В Интернете есть много статей и много ответов на SO, объясняющих, почему это не рекомендуется.

2. @Chris верно, но есть некоторые случаи, когда пользователи действительно хотят это сделать, иногда даже когда ветка является общей (небольшие команды разработчиков могут организовываться более эффективно для синхронизации с переписанной работой).

3. @Cupcake согласен. Но важно понять, почему это не рекомендуется делать, чтобы сделать это правильно.

Ответ №1:

В принципе, у вас правильная идея, хотя вместо удаления удаленной ветки перед переходом к ней вы можете просто принудительно перейти непосредственно к ней с помощью

 git push origin my-feature-branch -f
 

Единственная причина, по которой вы хотели бы сначала удалить удаленную ветку, — это если принудительное нажатие отключено на удаленном компьютере, поэтому его первое удаление — это способ «обмануть» и обойти это ограничение…хотя, если это ограничение существует, кто-то не должен хотеть, чтобы вы принудительно нажимали, поэтому убедитесь, что переписывание ветки — это то, что действительно устраивает вашу команду.

Обязательное предупреждение о передаче перезаписанных коммитов в общедоступные ветки: если ваша ветка используется совместно с другими разработчиками, принудительная отправка перезаписанных коммитов заставит этих других разработчиков повторно синхронизировать свою работу с новыми коммит, поскольку у всех у них будут копии старых. Это может быть сложным процессом, в зависимости от навыков Git вашей команды, поэтому убедитесь, что ваша команда действительно согласна с тем, что вы это делаете.