2014-10-17 4 views
1

В моей рабочей ветке у меня есть три зависимых патча. Все они не слиты.git: Как обновить фиксацию, которая не находится наверху

<commit id -1> 
<Commit id -2> 
<Commit id -3> 

Как я могу добавить новые изменения в <Commit id -2>?

В настоящее время вот как я это делаю.

git stash 
git reset --hard HEAD~1 
git stash apply 
git add . 
git commit --amend 
git cherry-pick <commit id -1> 

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

+0

Не ответ, но я использую [stgit] (http://www.procode.org/stgit/) для такого рода вещей. Он касается патч-стеков (аналогично одеяло) и позволяет обновить патч, который не на вершине. Он также с радостью «раскорит» git совершает в stgit исправления – Hasturkun

+0

возможный дубликат [Как изменить указанный коммит?] (Http://stackoverflow.com/questions/1186535/how-to-modify-a-specified-commit) –

ответ

1

Вы можете использовать интерактивную переадресацию и отредактировать требуемую фиксацию. Что-то вроде:

git rebase --interactive abc4321d^ 

В смене редактора pick к edit или e. Примените изменения (git stash pop), а затем выполните их.

Таким образом, вы можете изменить несколько старых коммитов в одном и том же забеге. Чтобы продолжить перебазироваться, и адрес следующей фиксации, вы будете использовать:

git rebase --continue 

В любое время, если вы чувствуете, что вы сделали что-то не так, вы можете отменить перебазироваться с помощью:

git rebase --abort 

Пожалуйста обратите внимание, что переписывание публичной истории (история репо, совместно используемая другими) - это неправильная привычка . Вы должны переписать предыдущие коммиты только в том случае, если они еще не опубликованы.

+0

Это может быть не актуально для этого вопроса, у меня всегда было это сомнение относительно переустановки. В intreactive rebase (или при выполнении rebase вообще), есть случаи, когда мне приходится делать rebase - продолжайте несколько раз? – Ajay

+0

@Ajay Да, если rebase остановлен путем изменения/переименования или конфликта слияния. – dan

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