У меня есть репозиторий мерзавца, который я использую, и я завинтил. Я сделал несколько патчей к исходному дереву и затем продолжил делать обновления, не фиксируя патчи сначала. Затем я фиксировал целый пакет вместе как один. Мое намерение состояло в том, чтобы делать обновления на отдельном ответвлении, которое я действительно создавал перед фиксацией.
Теперь в этой точке у меня есть два (соответствующих) ведущих устройства ответвлений, которые все еще стабильны, но нуждаются исправленный. И у меня есть new_auth_system, который имеет две фиксации перед ведущим устройством. Первое полно патчей, которые я вчера сделал и фиксировал. Второе имеет еще несколько патчей и невероятно большой и неясный объем удалений и дополнений через несколько файлов.
Я пытался использовать контроль мерзавца, чтобы вытащить определенные файлы из фиксации и прикрепить их на клон ведущего устройства в попытке исправить вещи, но я продолжаю становиться "фатальным: ссылка не является деревом"
Как я иду о получении по запросу определенных файлов через фиксации и в другое ответвление?
Спасибо!
Если ваша ситуация такова:
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
)
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
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
master
: x--x--x--x------x' (master, with patches) \ / y1a--y2a--y1b--y2b new_auth_system, with patches first, updates and refactoring second
Это лучше, чем пытаться изолировать некоторые файлы от одной ветви к другой: Git причины в терминах проекта (коллекция файлов под общим деревом), а не в терминах отдельных файлов.
Я немного смущен вашим вопросом, поэтому, пожалуйста, дайте мне знать, если мой ответ неправильный.
Насколько я понимаю, вы хотите откатить определенные файлы до определенного коммита. Для этого:
Используйте git log, чтобы получить версию (хэш), которую вы ищете:
git log -p filename
Когда у вас есть версия (хеш), используйте git checkout, чтобы восстановить этот файл:
git revert --no-commit version