Git — проблемы с интерактивным перебазированием и сжатием

StackOverflow https://stackoverflow.com//questions/10688064

  •  12-12-2019
  •  | 
  •  

Вопрос

Я знаю, что по поводу SO есть много вопросов, но я вообще не могу найти ответ, который ищу.

Я только что объединил свою ветку задач с основной и готов отправить свои изменения в удаленную главную ветку.Однако они отображаются как два коммита:

    commit 878c07412aab6a6b06b7fc8dd84c2418cc4f31d8
Merge: 9ffa590 c9f5552
Author: ***
Date:   Mon May 21 16:02:36 2012 +0100

    Merge branch 'modelUpdate4'

    Conflicts:
        ***.xcodeproj/project.pbxproj

commit c9f5552862872673317701c3dffd7fb6b6daa02c
Author: ***
Date:   Mon May 21 15:03:21 2012 +0100

    Modified model according to requests.  Repopulated seeded database.

Это выходные данные журнала git и два коммита, которые я хочу объединить в один.Однако когда я это делаю:

git rebase -i HEAD~2

На самом деле он просто отображает 4 ранее совершенных (и отправленных) коммита.Я неправильно понимаю, как мои ветки объединяются обратно?Если я попробую git rebase -i, это просто отобразит первый коммит в списке журналов git.

Спасибо!

Это было полезно?

Решение

Поскольку вы сказали, что четыре коммита уже были отправлены, я предполагаю, что ваш график (git log --oneline --decorate --graph) выглядит примерно так: у вас есть коммиты ветвления между master и modelUpdate4 уже отправлено в удаленный репо:

* (master, modelUpdate4, HEAD) Merge branch 'modelUpdate4'
| \
|  * (origin/modelUpdate4) Modified model according to requests. [HEAD^2]
|  |
|  * Another commit on modelUpdate4
|  |
|  * Yet another commit on modelUpdate4!
|  |
*  | (origin/master) Something that conflics with a commit in modelUpdate4 [HEAD~1]
| /
* Previous commit on master [HEAD~2]

HEAD~2 является первым родителем первого родителя, и поскольку ваш HEAD представляет собой слияние modelUpdate4 в master, это относится к двум коммитам вниз master линия. HEAD^2 является HEAD's второй родитель, поэтому фиксируйте перед HEAD вниз по modelUpdate4 линия.(Смотрите также: http://paulboxley.com/blog/2011/06/git-caret-and-tilde)

Если HEAD~2 это ваша новая база, вы получите все коммиты между HEAD~2 и master по прямой.Вам также придется иметь дело с конфликтом ветвей в modelUpdate4 зафиксируйте, где это произойдет.

* (master, HEAD) Merge branch 'modelUpdate4'
|
* Modified model according to requests.  Repopulated seeded database.
|
* Another commit on modelUpdate4
|
* Yet another commit on modelUpdate4!
|
* Something on master that conflics with modelUpdate4
|
* Previous commit on master

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

В качестве альтернативы вы можете выполнить перебазировку непосредственно на origin/master. origin/modelUpdate4 в конечном итоге окажется в дебрях git, но, поскольку это ветка задач, я уверен, вы все равно просто удалите ее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top