Nano Hash - криптовалюты, майнинг, программирование

Как переместить все коммиты в другую ветку?

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

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

Конечным результатом должна быть ветвь wip с содержимым и историей фиксации, идентичная текущей ветке master, и ветка master с одной фиксацией с содержимым, идентичным текущей ветке wip.

Как это сделать безопаснее всего?


  • Как вы хотите, чтобы master выглядел после слияния с master в новой версии? Будет ли он идентичен wip со всеми небольшими коммитами? Или вы намереваетесь сделать для этой версии единственную сжатую фиксацию? 27.06.2021
  • Во-вторых, я хочу, чтобы у master была единственная фиксация, идентичная последней стадии wip на данный момент. 27.06.2021
  • Я обновил ваш вопрос, чтобы добавить желаемый конечный результат на основе этого комментария. (Если я интерпретирую это неправильно, пожалуйста, не стесняйтесь исправлять). 27.06.2021

Ответы:


1

Вы можете начать с создания wip из вашей текущей master истории:

git switch -c wip master

Оттуда вы можете работать над веткой wip, а затем слить с master, когда будете готовы.

Я также хочу очистить историю на мастере

Затем вы можете reset --hard свой master использовать более старую фиксацию или все вернуться к первой фиксации и принудительно нажать ее ( при условии, что вы уведомили других пользователей репозитория).

27.06.2021
  • Спасибо за ответ. Еще хочу очистить историю по мастеру. 27.06.2021
  • @Agr Хорошо, я соответствующим образом отредактировал свой ответ. 27.06.2021
  • Есть ли какие-либо возможные побочные эффекты для других, если я сделаю полный сброс, а затем сливаю из своей ветки wip? 27.06.2021
  • @Agr См. Этот ответ на Каковы практические последствия переписывания истории Git? 27.06.2021
  • @ j6t Да: другим пользователям необходимо получить и сбросить их собственную основную ветку на вашу. Им также необходимо изолировать свою работу в своей ветке. 27.06.2021

  • 2

    Один из подходов - переименовать текущую ветвь master в wip, а затем создать новую пустую ветку master. Затем группы коммитов могут быть скопированы в новую ветку master из wip, объединены в отдельные коммиты в новом master.

    # Rename the master branch to "wip" locally
    git branch -m master wip
    
    # Rename the remote master branch to "wip"
    git push origin -d master
    git push origin -u wip
    
    # Check out a new, empty branch as master
    git checkout --orphan master
    git reset --hard
    
    # Create a squashed commit matching the current state of wip
    git checkout wip -- .
    git add .
    git commit
    
    # Push the new master
    git push origin -u master
    

    Детальное объяснение

    Для переименования используйте параметр перемещение ветки филиал локально:

    git branch -m master wip
    

    Удалите удаленную ветку с помощью push delete, затем добавьте новую удаленную ветку, соответствующую локальной ветке wip, используя продвинуть вверх по течению:

    git push origin -d master
    git push origin -u wip
    

    Создайте новую пустую ветку без истории коммитов. Это делается путем создания сиротской ветки (без каких-либо коммитов) с помощью тега вариант оформления заказа, потерянный. Существующие файлы останутся (незафиксированными), поэтому удалите их с помощью параметр жесткого сброса:

    git checkout --orphan master
    git reset --hard
    

    Скопируйте текущее состояние ветви wip в ветку master. Сначала скопируйте все файлы из ветки wip, используя оформить заказ с параметром pathspec с текущим рабочим каталогом pathspec (.) для рекурсивного включения всех файлов в текущем рабочем каталоге. Все эти файлы добавляются в индекс с помощью добавления с pathspec с текущим рабочим каталогом pathspec. Наконец, создается единая фиксация со всеми этими файлами с использованием параметра commit:

    git checkout wip -- .
    git add .
    git commit
    

    Наконец, новая ветка master перемещается в источник с помощью вариант продвижения вверх по течению:

    git push origin -u master
    
    27.06.2021
  • Я подумал о сиротской ветке, но решил не рекомендовать такой подход. Таким образом, wip и master будут вести общую историю (по крайней мере, с первого коммита) 27.06.2021
  • @VonC Верно, но спрашивающий, похоже, не хочет общей истории, а вместо этого имеет разные, более подробные коммиты. Тем не менее, у подхода общей истории есть определенные преимущества. 27.06.2021
  • Хотя я могу неверно истолковать. Я спрошу. 27.06.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..