Перемещение всех коммитов за пределы первоначального коммита с мастера

я разрабатывал фиксацию в главной ветке и хотел бы переместить все фиксации за пределы «начальной фиксации» в отдельную ветку разработки и сохранить мастер для выпускных версий.

прямо сейчас мое дерево выглядит так:

master: A - B - C - D - E - F

я хотел бы, чтобы это выглядело так:

development:   B - C - D - E - F
              /
master:      A -----------------

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

development:   B - C - D - E - F --- X
              /                       \
master:      A ----------------------- Y

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


person Daniel Byon    schedule 17.07.2011    source источник
comment
С git вам не нужно беспокоиться о том, чтобы что-то испортить после того, как оно будет зафиксировано. Если вы на самом деле не удалите репозиторий со своего диска, любые сделанные вами коммиты всегда будут там и могут быть восстановлены в течение как минимум двух недель (по умолчанию), прежде чем они будут иметь право на сборку мусора.   -  person Ryan Stewart    schedule 18.07.2011


Ответы (2)


Чтобы быть простым:

(on master)
git branch development
git reset --hard A
person manojlds    schedule 17.07.2011

сначала создайте новую ветку для фиксации F (последняя фиксация на мастере ветки):

git checkout -b dev master # or directly using the commit hash:
git checkout -b dev SHA1_OF_F # if master is currently checked out:
git checkout -b dev

затем верните основную ветку (не разрушая рабочее дерево)

git branch -f master SHA1_OF_A

мастер проверки еще раз, если вы хотите продолжить работу над ним:

git checkout master

если вас не волнует ваше рабочее дерево (оно чистое, т. е. нет ни незафиксированных, ни неустановленных изменений, вы можете использовать git reset --hard, как предложено @manojlds в своем ответе.

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

person knittl    schedule 17.07.2011
comment
Я получаю ! [отклонено] master -> master (без быстрой перемотки вперед) ошибка: не удалось отправить некоторые ссылки на «[email protected]:danielbyon/GetBig.git». Чтобы предотвратить потерю истории, обновления без быстрой перемотки вперед были отклонены Слейте удаленные изменения (например, «git pull») перед повторной отправкой. Дополнительные сведения см. в разделе «Примечание о быстрой перемотке вперед» в «git push --help». когда я пытаюсь нажать на github - person Daniel Byon; 17.07.2011
comment
@daniel: да, если вы ранее отправляли master, вы не сможете сделать это снова, не заставляя git push и перезаписывать, потому что это удалит историю из общедоступного репозитория. пользователи, которые ранее клонировали ваш репозиторий, имеют главную ветку, указывающую на фиксацию, которая была сделана после вашей последней основной фиксации. если вы абсолютно уверены, что хотите нажать (также применимо, если вы являетесь единственным разработчиком, использующим этот репозиторий), используйте git push -f origin master или git push origin +master - person knittl; 17.07.2011