2015-06-11 3 views
1

Я нахожусь в середине одной большой перестановки с большим количеством конфликтов.Вернуть один патч git rebase

только что узнал пару git rebase --continue, прежде чем я случайно удалю один файл вместо другого.

Как я могу вернуться в pacth и исправить это, а затем повторно применить патч?

Редактировать: --abort не является решением проблемы, так как мне снова придется делать ВСЕ патч. Я хочу прервать только часть из них

ответ

3

Все в вашем репо остается там до тех пор, мерзавец не видит, что это было совершенно недостижимым, через любой реф, по крайней мере месяц .

Итак, вы сделали какой-то эквивалент git rebase master topic, скажем, 26 коммитов AZ на тему с веткой, и вы сделали то, что оказалось очень плохой, перезарядило O и на самом деле не получило полного эффекта до тех пор, пока S :

 A...O...Z topic 
    /
...a....z  master 
    \ 
    A2..O2..S2 the inflight rebase with the mistake in the rebased O, O2 

Ваш является откат

git tag restart O2~ 
git rebase --abort 
git rebase --onto restart O^ topic 

и теперь у вас есть только переделывать совершающие заражен Упсом.

Если есть хорошие детали для коммитов в серии O2 ~ ..S2, разрешения конфликтов, которые вы хотите получить, вы также можете пометить S2, а затем во время повтора просто проверьте хорошие части от этих коммитов, git checkout boneyard~3 -- goodpart1 goodpart2 etc etc (где вы отметили S2 как «boneyard», а хорошие детали находятся в P2

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


Вы можете принудительно удалить усечение раньше. Не делай этого.

1

git rebase --abort и повторить замену.

+0

Обновленный вопрос, прерывание не является решением – Lesto

+0

@lesto, --abort ** является ** решением, вам просто не нравится, потому что это означает больше работы .... но тогда вы не должны иметь испортил rebase!;) –

1

Выполните следующие действия:

git rebase --abort 

Это прервет перебазироваться и принести HEAD обратно в состояние, которое было до перебазирования.

Я не думаю, что есть возможность вернуть один патч, используя git rebase. См. Возможные варианты в документах git rebase.

git rebase --help 
GIT-REBASE(1)      Git Manual      GIT-REBASE(1) 

NAME 
     git-rebase - Forward-port local commits to the updated upstream head 

SYNOPSIS 
     git rebase [-i | --interactive] [options] [--onto <newbase>] 
       [<upstream>] [<branch>] 
     git rebase [-i | --interactive] [options] --onto <newbase> 
       --root [<branch>] 
     git rebase --continue | --skip | --abort 

    In case of conflict, git rebase will stop at the first problematic 
    commit and leave conflict markers in the tree. You can use git diff to 
    locate the markers (<<<<<<) and make edits to resolve the conflict. For 
    each file you edit, you need to tell git that the conflict has been 
    resolved, typically this would be done with 

     git add <filename> 

    After resolving the conflict manually and updating the index with the 
    desired resolution, you can continue the rebasing process with 

     git rebase --continue 

    Alternatively, you can undo the git rebase with 

     git rebase --abort 

Также проверьте эту ссылку, если это помогает.

http://arigrant.com/blog/2014/5/4/git-rebase-stepping-forward-and-back

+0

Обновленный вопрос, прерывание не является решением – Lesto

+3

Обновлено ан. Также проверьте эту ссылку, если это поможет. http://arigrant.com/blog/2014/5/4/git-rebase-stepping-forward-and-back –

+1

Также попробуйте команду 'git reflog'. –

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