Как удалить все коммиты из уже вставленной ветки в git? - PullRequest
2 голосов
/ 15 марта 2012

Работая над проектом с большим количеством членов команды, мы сейчас пытаемся отточить наши методы работы. В настоящее время вся работа выполняется в integration ветви, которая была разветвлена ​​master несколько лет назад. По той или иной причине в основной ветке было выполнено около 600 коммитов, которые не были объединены в интеграцию, а также около 1200 коммитов, выполненных в интеграции и не объединенных в основную ветвь. Все релизы сделаны полностью из ветки интеграции, основная ветка не затрагивалась раз в год. Мы хотели бы использовать ветку master в качестве нашей стабильной ветки, но для этого нам нужно объединить все изменения из integration и не сохранять какие-либо отклоненные изменения, сделанные в master.

Есть ли головной болью бесплатный способ удалить "недействительные" коммиты из главной ветки? Или мы должны просто создать новый репозиторий или другую стабильную ветку вне текущей позиции интеграции?

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

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Если вы не можете сделать удаленное удаление, то самый простой способ:

git checkout integration
cp -a . ../integration-source
rm -rf ../integration-source/.git
git checkout master
mv .git ../integration-source
cd ../integration-source
git add --all
git commit -m"massive commit to make master identical with integration"
git push
cd ..
rmdir projectdirname
mv integration-source projectdirname

та-да! * * 1004

Если вы можете сделать удаленное удаление:

git push --force origin integration:master
1 голос
/ 15 марта 2012

Вы должны иметь возможность git reset --hard вашей основной ветви вернуться к точке, в которой вы изначально создали свою интеграционную ветку. Это оставит вас в том состоянии, в котором вы были, когда вы впервые разветвились, по сути, «удалив» будущие коммиты с мастером.

В этот момент вы можете просто объединить ветку интеграции с мастером, и они будут идентичны. На самом деле, я бы подумал, что это будет просто ускоренное слияние без конфликтов.

Чтобы найти исходную точку ветвления, вы можете использовать git merge-base master integration. Проверьте этот вопрос переполнения стека для получения дополнительных идей.

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