Git: дублирующие коммиты после локального ребейза, затем тяните

Справочная информация:

У меня есть ветка А, которая является одним коммитом перед моей веткой разработки:

3   (develop, origin/develop)
| 2 (A, origin/A) some feature branch commit
|/
1   some commit

Затем я делаю ребрендинг А по разработке ( git checkout A, git rebase development), так что я получаю:

2'  (A) some feature branch commit
|
3   (develop, origin/develop)
| 2 (origin/A) some feature branch commit
|/
1   some commit

Теперь я больше не могу нажимать A на происхождение , так как Git отклонит не быстрый форвардный коммит. Он говорит мне сначала потянуть за удалённые изменения.

Когда я делаю это, а затем нажимаю, я получаю следующую историю:

4   (A, origin/A) merged origin/A into A
|\
2'| some feature branch commit
| |
3 | (develop, origin/develop)
| 2 (origin/A) some feature branch commit
|/
1   some commit

я получаю историю, содержащую коммит 2 дважды -- технически разные коммиты, хотя они делают одну и ту же вещь.

Вопросы

  1. Как я могу предотвратить это? Как я могу отразить мою локальную операцию ребейзинга на удалённом репо?
  2. Как я могу исправить эту ситуацию? Какой самый элегантный способ очистить историю и показать только один коммит?
19
задан Ajeet Ganga 10 June 2015 в 22:21
поделиться