2012-06-22 7 views
1

Мне интересно, можно ли применить патч git на незавершенной ветке?Как применить патч git на незавершённой ветке?

Я хотел бы сделать это, потому что я не хочу, чтобы этот патч на моей рабочей ветке, но на выделенной ветке, которую я сейчас не использую. Это большой филиал, и проверка его будет:

  1. сделать мои буйные теги бесполезными или сломанными. Это займет много времени, чтобы перестроить их.
  2. также, мое ядро ​​заставит перестраивать, если я извлекаю эту ветку и Откат к моей рабочей ветви ...

ответ

1

Это крайне косвенно, но возможно. Вы можете сделать это, применив его только к индексу.

Самый простой способ:

$ git read-tree <branch> 
$ git apply --cached <patch> 
$ git update-ref refs/heads/<branch> \ 
    -m "<optional reflog message>" \ 
    $(git commit-tree $(git write-tree) -m "<message>" -p <branch>) 

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

$ git checkout -b temp    # Create a temp branch 
$ git reset --mixed <branch>  # Reset the index to the branch you want 
$ git apply --cached <patch>  # Apply the patch to the index 
$ git commit      # Create a commit object 

    # Move the branch's reference to the new commit 
$ git update-ref refs/heads/<branch> refs/heads/temp 

    # Clean up 
$ git checkout --force <original_branch> 
$ git branch -d temp 
+0

Вау, я не знал 'git read-tree'. Я должен дать вашему решению попробовать, это звучит рискованно и интересно :-). Один вопрос: как вы называете «рефлог»? –

+0

Reflog - это история того, где ссылки реферала и HEAD были в репозитории. [Вот пример] (https://gist.github.com/3004498). В этом примере самым последним «сообщением reflog» будет «commit: test». Вы можете увидеть это для своего репозитория, запустив 'git reflog [refs/heads/]'. (Если вы не укажете ветку, она предполагает HEAD.) – vergenzt

1

Вы можете клонировать из текущего репозитория в другой каталог и проверить ветку вы хотите работать там? AFAIK, вы можете применять патч, или захват вишни, и т. Д. К файлам в вашем рабочем каталоге.

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

+0

это, наверное, то, что мне нужно будет делать. –

+0

@ m-ric Idk, если вы это сделали, но я понял путь. : D (я горжусь этим.) – vergenzt

+0

@vergenzt Нет, я не понял пути. Я думаю, что Питер ван дер Ли прав, как бы я справился с неудачей патча? Я перестроил свое ядро, как и каждое утро в эти последние несколько дней ... –

1

Я не думаю, что это возможно в основном по этой причине:

Как вы будете иметь дело с отказом патч?

+0

Хм, это имеет смысл. Я согласен, что это будет сложно. –

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