Используя мерзавца для слияния определенных файлов от другой фиксации ответвления

У меня есть репозиторий мерзавца, который я использую, и я завинтил. Я сделал несколько патчей к исходному дереву и затем продолжил делать обновления, не фиксируя патчи сначала. Затем я фиксировал целый пакет вместе как один. Мое намерение состояло в том, чтобы делать обновления на отдельном ответвлении, которое я действительно создавал перед фиксацией.

Теперь в этой точке у меня есть два (соответствующих) ведущих устройства ответвлений, которые все еще стабильны, но нуждаются исправленный. И у меня есть new_auth_system, который имеет две фиксации перед ведущим устройством. Первое полно патчей, которые я вчера сделал и фиксировал. Второе имеет еще несколько патчей и невероятно большой и неясный объем удалений и дополнений через несколько файлов.

Я пытался использовать контроль мерзавца, чтобы вытащить определенные файлы из фиксации и прикрепить их на клон ведущего устройства в попытке исправить вещи, но я продолжаю становиться "фатальным: ссылка не является деревом"

Как я иду о получении по запросу определенных файлов через фиксации и в другое ответвление?

Спасибо!

1
задан 22 June 2010 в 05:19
поделиться

2 ответа

Если ваша ситуация такова:

 x--x--x--x (master, need patch)
        \
         y1--y2  new_auth_system, with y1 containing some patches *and* updates
                                  and y2 containing massive refactoring

Я бы сначала пересохитил:
(если вы еще не нажали new_auth_system)

  • a rebase --interactive для разделения y1 на y1a (только с вашими патчами) и y1b (обновления), и y2 в y2a (больше патчей) и y2b (массивный рефакторинг)
    git checkout new_auth_system
    git rebase -i y1^

     x--x--x--x (master, need patch)
            \
             y1a--y1b--y2a--y2b  new_auth_system, with y1a containing only patches
                                                       y1b containing only updates
                                                       y2a containing only patches
                                                       y2a containing refactoring
  • a rebase --interactive для изменения распорядка фиксаций 'y' (сначала патчи, обновления и рефакторинг второй)
    git checkout new_auth_system
    git rebase -i y1a^

     x--x--x--x (master, need patch)
            \
             y1a--y2a--y1b--y2b  new_auth_system, with patches first (y1a, y2a)
                                                       updates and refactoring second
  • git merge для интеграции этих патчей в master:
     x--x--x--x------x' (master, with patches)
            \       /
             y1a--y2a--y1b--y2b  new_auth_system, with patches first, 
                                                       updates and refactoring second

Это лучше, чем пытаться изолировать некоторые файлы от одной ветви к другой: Git причины в терминах проекта (коллекция файлов под общим деревом), а не в терминах отдельных файлов.

2
ответ дан 2 September 2019 в 23:36
поделиться

Я немного смущен вашим вопросом, поэтому, пожалуйста, дайте мне знать, если мой ответ неправильный.

Насколько я понимаю, вы хотите откатить определенные файлы до определенного коммита. Для этого:

Используйте git log, чтобы получить версию (хэш), которую вы ищете:

git log -p filename

Когда у вас есть версия (хеш), используйте git checkout, чтобы восстановить этот файл:

git revert --no-commit version
0
ответ дан 2 September 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: