2010-06-22 2 views
1

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

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

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

Как мне перетащить определенные файлы через коммиты и в другую ветку?

Спасибо!

ответ

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 

Я Recommand первый:
(если не нажат 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 реорганизовать 'у' совершает (патчи первого, обновления и рефакторинг второй)
 
    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 reasons in term of project (набор файлов под общим дерево), а не в виде отдельных файлов.

+0

Спасибо за ваш ответ. Хорошо, так что именно то, что я надеюсь сделать. Кроме того, я уже сделал изменения на сервере. Я единственный, кто использует репозиторий git, поэтому невозможно, чтобы кто-то потянул его, поскольку он был нажат. Неужели это еще плохая идея переупаковать? – 2010-06-22 17:51:35

+0

@ Robert: нет, это не плохая идея, так как вы можете «git push -f» выйти из этой ситуации, эффективно заменив предыдущую историю коммитов, уже подтолкнутых этой новой историей. Поскольку вы единственный, кто использует этот репо, никто не будет «страдать» от этого нажатия. – VonC

+0

Хорошо. Я все для этого .... и я попробовал и потерпел неудачу. Видимо, я не совсем уверен, как использовать интерактивную гитару git. Как-то я полностью удалил фиксацию. Не волнуйтесь. Я переименовал локальное репо в другой каталог и снова клонировал пульт, поэтому я вернулся туда, где начал. Есть ли учебник или screencast там на rebase, который покрывает стиль rebasing? Я искал «git rebase -i», но все, что я могу найти, это «преимущества перезагрузки и слияния». – 2010-06-23 01:36:05

0

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

Из того, что я понимаю, вы хотите откат определенных файлов на конкретную фиксацию. Для этого:

журнала Использования GIT, чтобы захватить версию (хэш), который вы ищете:

git log -p filename 

После того, как у вас есть версия (хэш), использование GIT извлечет вернуть этот файл:

git revert --no-commit version 
+0

Его немного сложнее, чем я думаю.VonC имеет правильную идею о том, что происходит, и даже имеет красивую маленькую картину, которая точно описывает, что я думаю об этом. – 2010-06-22 17:52:51

Смежные вопросы