Восстановление после неправильной перебазировки или слияния - PullRequest
3 голосов
/ 31 января 2012

У нас есть 2 филиала: master и free .Большая часть кода написана в master и объединена в free (не наоборот).Теперь, в какой-то момент что-то пошло не так: код, который должен быть только в ветке free , теперь появляется в master .Похоже, что кто-то слил free в master (или заново основан на вершине master) и вытолкнул это.Это глупо, но мы не можем определить, когда это произошло и какой коммит (коммит) представляет эту ошибку.

Буду признателен за любые советы о том, как выйти из этой ситуации.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Вы можете использовать опцию -S<search-string> для git log, чтобы найти, какие коммиты добавили или удалили определенную строку из файла. ¹ Итак, если вы знаете, что класс ToasterFactory был введен только в ветке free Вы можете сделать следующее, чтобы увидеть, какие коммиты слияния привели это в master:

git log -SToasterFactory --merges master

... или, если это могло произойти из-за ребаз или вишни, вы можете просто сделать:

git log -SToasterFactory master

Если это был коммит слияния, который внес все изменения с master, вы можете попробовать отменить этот коммит слияния, например с:

git revert <SHA1-OF-MERGE-COMMIT>

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


speaking Строго говоря, эта опция возвращает коммиты только в том случае, если количество вхождений этой строки в конкретном файле. В git версии 1.7.4 или новее вы можете использовать опцию -G.

0 голосов
/ 06 февраля 2012

Наконец, я восстановил основную ветку, выполнив следующие простые шаги:

  1. Определите коммит, который указывал на стабильную ветвь (до того, как кто-то сделал ребаз).Я использовал git checkout master @ {YYYY-MM-DD}, чтобы определить главу мастер-ветви до дня, когда все это произошло.Это оказалось последним коммитом перед слиянием-коммитом со свободной веткой (что неудивительно).
  2. Разветвление стабильного коммита и вишня выбирают все мастер-коммиты (исключая коммит слияния).

Вероятно, наиболее важной частью является осознание того, что ребаз не настолько разрушителенв конце концов.Уничтожает историю, но не дерево.Таким образом, всегда есть коммит, к которому вы можете вернуться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...