Я давно не использовал git-svn, но техника для распутывания запутанных коммитов должна быть такой же.Просто замените push
на dcommit
.
На данный момент у меня есть несколько наборов изменений, которые были объединены в мастер, но еще не переданы обратно в SVN.Я пока не могу выдвинуть их, потому что они ожидают других зависимостей, но между тем мне нужно выпустить еще одно срочное исправление.
Как и в Git, отмените слияние.Затем поместите ваше срочное исправление на master
.Теперь, когда срочное исправление отделено от другой работы, вы можете нажать master
.
При просмотре вашего репозитория коммит слияния отсутствует, слияние должно быть ускоренным.
Сначала, избавься от b11859
.Это будет просто поддерживать старые коммиты, пока мы будем перемешивать вещи.Это просто ярлык.Мы воссоздадим его позже.
git branch -d b11859
git log --graph --decorate --all
* 5ac10e3 (HEAD, master) Bug#1234: Urgent
* 2c0f704 Bug#1001
* beb3e0c Bug#1002
* c84efc2 (origin/trunk) Bug#1003
Мы хотим, чтобы это срочное исправление было сразу после origin/trunk
, чтобы мы могли отменить его без всего остального.
Самое простое, что можно сделать, это интерактивная перебазировка для изменения порядка коммитов в мастере.
git checkout master
git rebase -i origin/trunk
Это вызовет редактор, подобный так:
pick e881c96 Another large feature
pick c96a462 Some Large Feature
pick f848cca Urgent
# Rebase ba50aa8..f848cca onto ba50aa8 (3 commands)
#
# Commands:
...a bunch of instructions you should read...
Это коммиты на master
с origin/trunk
от первого до последнего.Вы буквально переупорядочиваете их в редакторе по своему вкусу.Мы хотим, чтобы Urgent
был первым.
pick f848cca Urgent
pick e881c96 Another large feature
pick c96a462 Some Large Feature
Затем сохраните и выйдите.Ваши коммиты будут переупорядочены.Если есть какие-либо конфликты, исправьте их и следуйте инструкциям.
git log --graph --decorate --all
* c96a462 (HEAD, master) Bug#1001
* e881c96 Bug#1002
* f848cca Bug#1234: Urgent
* c84efc2 (origin/trunk) Bug#1003
Теперь нам нужно вернуться master
обратно к Срочному коммиту.Сначала воссоздайте старую ветку, чтобы сохранить их коммиты.
git branch old_branch
git log --graph --decorate --all
* c96a462 (HEAD, master, old_branch) Bug#1001
* e881c96 Bug#1002
* f848cca Bug#1234: Urgent
* c84efc2 (origin/trunk) Bug#1003
Затем вернитесь master
обратно к Срочному коммиту.
git branch -f master f848cca
git log --graph --decorate --all
* c96a462 (HEAD, old_branch) Bug#1001
* e881c96 Bug#1002
* f848cca (master) Bug#1234: Urgent
* c84efc2 (origin/trunk) Bug#1003
Теперь, когда другие изменения были удалены измастер, вы можете нажать / dcommit только ваше срочное исправление ошибки из master
.
Как только это будет сделано, вы можете снова объединить old_branch
в master
и запустить b11859
.