2014-02-20 4 views
1

Допустим, я совершил 1, 2, 3, 4, 5. совершать 2 и 5 - это мое, остальное делается другими. из-за 3,4 фиксации есть некоторая ошибка! Я толкнул коммиты. совершить 5 являются изменения я хочу применить на совершение 2.Git Удалить Конкретные коммиты

я хочу, чтобы откатить совершить 2 и применить мои новые изменения commmit 5.

Как я должен удалить коммиты 3 и 4 в одиночку?

ответ

1

Делают перебазироваться:

git rebase -i HEAD~5 

Откроется окно редактора; просто удалите строки pick, соответствующие фиксации 3 и 4. Выйдите из редактора: rebase будет продолжен.

Примечание: опасно и источник конфликтов; если перебазироваться не может по какой-то причине, либо исправить ее (вручную, см git rebase справочной страницы) или прервать его git rebase --abort)

Когда перебазироваться сделано, нажмите с помощью опции -f. Но люди, работающие с вами на этом репо, не будут вам благодарны!

+0

Я совершил недавние изменения! – Dineshkumar

+0

Затем пропустите секретную часть;) Редактирование – fge

+0

также я нажал! – Dineshkumar

0

Вот еще один метод для разнообразия.

То, что вы должны в идеале сделать, это создать новые коммиты на вершине 5 которая возвращается код в совершает 3 и 4.

Если вы не отодвигают эти коммиты, вы можете также сделать вишнево-медиатор. Скажите свои HEAD-очки вашего репозитария на 5, и это мастер ветки.

1 -> 2 -> 3 -> 4-> 5 (HEAD, master) 


git co -b temp 

1 -> 2 -> 3 -> 4 -> 5 (HEAD, master, temp) 


git co master 
git reset --hard HEAD~3 

1 -> 2 (HEAD, master)-> 3 -> 4 -> 5 (temp) 


git cherry-pick temp 

1 -> 2 -> 3 -> 4 -> 5 (temp) 
    | 
    -> 5' (HEAD, master) 


git branch -D temp 

1 -> 2 -> 5' (master, HEAD) 


Я думаю, что это то, что вы хотите. Хотя вам лучше создать реверт-фиксации поверх 5.

Примечание: Метод, данный @fge, более краткий и лучший, если раньше вы делали интерактивную перестановку. Если нет, это даст вам шанс на бой, так как вы всегда можете просто объединить мастера обратно в темп и дойти до точки, с которой вы начали.

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