2010-05-06 3 views
4

Я получил мой репозиторий в немного государства и хочу, чтобы иметь возможность работать мой выход из негоGit - прибирать репо

РЬИХ выглядит как это (A1, B1, C1 и т.д. очевидно совершает)

    A1 ---- A2 ---- A3 ---- A4 ---- A5 ---- A6 ---- A7 ---- A8 
                   /
(from a remote repo) B1 ---- B2 --------------------------------- 
           | \ 
           \ C1 ---------------------------------C2 
           \         /
           D1 --- D2 --- D3 --- D4 --- D5 --- D6 

в идеале я хотел бы быть в состоянии удалить все ревизии (с перебазирования?) на B, C и D линии (я ненавидела сказать ветви просто потому, что теперь никаких локальных ветвей на этих линиях, кроме ответвлений на удаленное репо) и попытайтесь снова объединиться в удаленном репо, возможно, лучше.

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

Надеюсь, что это достаточная информация. Многие ТНХ

Simon

ответ

1

По аккуратным, я предполагаю, что вы имеете в виду линеаризуем изменения.

Вы должны быть в состоянии сделать что-то вроде:

git rebase A B 
git rebase 'A C 
git rebase ''A D 

A B C и D представляют коммит/реф, участвующие в перебазировании. Фактически, прохождение A B C и/или D для перезагрузки, вероятно, сделает ничего. Вы должны сделать что-то вроде этого:

git rebase master branchname 

Помогло ли это?

+0

Thx Я попытался мерзавец перебазироваться A7-SHA1 B1-SHA1 и ничего не появляется, чтобы изменить. Это ты имел в виду? –

+0

Извините, не прояснилось! Команда, которую я ввел, была git rebase c96769ef2f 557b29ecc0 –

+0

Rebase - это операция на ветвях. Просто создайте локальные ветви в коммитах, с которыми вы хотите играть, выполните операции, нажмите то, что вы хотите, а затем удалите эти ветви. – Novelocrat

1

Сброс ветвей, скорее всего, вы хотите сделать, как предположил xyld.

Прежде чем вы это сделаете, я бы порекомендовал reading up on the rebase command from chapter 3 of the Pro Git book. Это должно помочь объяснить, как работает этот процесс, и «получить», о котором вам нужно знать. (Например, вы никогда не должны переустанавливать коммиты, которые вы уже нажали в публичный репозиторий, или это будет испорчено для всех остальных ... но похоже, что это не так.)

+0

Thx vm. Это отличный ресурс. –

0

Когда я Выполнение

git rebase -f 557b29ecc0ec c96769ef2f 

Это, очевидно, выполняет rebase. Тем не менее, он сообщает

Falling back to patching base and 3-way merge... 
error: Your local changes to 'Client/WebDataEntry/temp.txt' would be overwritten by 
merge. Aborting. 
Failed to merge in the changes. 
Patch failed at 0004 Initial Source Load 

Я ранее добавленный/совершали никаких изменений, поэтому не уверен, почему он должен сообщить об этом, кроме есть какое-то циклическая ситуация или ситуаций, в которой он не в состоянии разрешить конфликт автоматически так как он заканчивает с

When you have resolved this problem run "git rebase --continue". 
If you would prefer to skip this patch, instead run "git rebase --skip". 
To restore the original branch and stop rebasing run "git rebase --abort". 

Так что я пытаюсь запустить перебазироваться в интерактивном режиме

git rebase -i 557b29ecc0ec c96769ef2f 

, но я получаю ошибку

Invalid branchname: c96769ef2f 

Возможно, я должен добавить, что может быть, что мое мышление/понимание ошибочны.Я надеялся, что, поскольку нет общего предка между A1 и B1, если я переустанавливаю B1 (или любые последующие его фиксации) на A1, он эффективно удалит линии B1/C1/D1.

Thx снова

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

  • Нет связанных вопросов^_^