2014-02-08 1 views
4

Глядя на график пересмотра, предоставленный Tortoise Git, я обнаружил серию коммитов, которые показывают, что в нее сливается сиротская ветвь. Немного больше исследований показало, что корневая фиксация этих осиротевших ветвей была фактически незатронутой файловой фиксацией некоторых задержек, которые были объединены в нашу ветвь развития одним из членов нашей команды. Все ветви сирот, показанные на графике пересмотра, были от одного и того же члена команды, поэтому было ясно, что это было результатом того, что она делала в своем процессе управления репозиторией Git, который, как представляется, включал использование выбора «Слияние с» из контекста меню для кошелька, отображаемого в диалоговом окне списка закладок.Как удалить или очистить сироты «untracked file» commit, объединенные в целевую ветку при слиянии из списка git stash?

Я искал interweb для получения справки о том, как «удалить» или иным образом очистить эти необработанные файлы от вашей ветви, чтобы, в свою очередь, очистить наш график пересмотра, чтобы не показывать эти сироты. На данный момент я ничего не смог найти. Насколько мне известно, я не вижу никаких негативных последствий для реальной базы кода в ветвях филиалов, которые включают эти сироты, но все равно хотел бы удалить или отменить их, чтобы очистить историю и просмотр, предоставленные графиком ревизий. Любые предложения или понимание ситуации, которую мы имеем или прокомментируем другие возможные осложнения, которые могут возникнуть из-за этого, которые мы не рассмотрели, будут высоко оценены.

Tortoise Git revision graph showing orphan branches

спасибо за время, Майк

+0

У меня был образ графа пересмотра Tortoise Git и войти вид, что я хотел опубликовать в качестве поддержки для вопроса, но я просто не хватает репутации, чтобы сделать это еще. Я - stackoverflow noob, и я все еще пытаюсь понять все. –

+0

Вы заглянули в точки прививки? (http://stackoverflow.com/a/1491057/6309, как используется в http: // stackoverflow.com/a/21623336/6309) – VonC

+0

Теперь у вас более 10 репутации, поэтому вы можете использовать функцию загрузки, чтобы добавить изображение непосредственно к сообщению. – poke

ответ

2

ПРЕДУПРЕЖДЕНИЕ: Следующая команда rewrites history, которая является наиболее часто нежелательны на общих хранилищах. Этот ответ предполагает, что это приемлемо.

git rebase без --preserve-merges должен работать большой:

Вот как я тестировал:

mkdir test_orphan 
cd test_orphan/ 
git init 
echo "new file" > file1 
git add file1 
git commit -m "mainline" 
echo "some changes" >> file1 
git commit -a -m "some changes" 
git checkout --orphan orphan 
echo "orphan changes" >> file2 
git add file2 
git commit -a -m "orphan changes" 
git checkout master 
git merge orphan 
echo "additional changes" >> file1 
git commit -a -m "more changes" 

Это должно привести к какой-то истории, как это (git log --decorate --oneline --graph):

* 976e170 (HEAD, master) more changes 
* 7bbc2da Merge branch 'orphan' 
|\ 
| * 4a9d9c0 (orphan) orphan changes 
* c2a9ecb some changes 
* 1523991 mainline 

сейчас для отмены этих изменений:

git rebase 1523991 

Результаты в дереве, которое выглядит следующим образом:

* 3b63a46 (HEAD, master) more changes 
* c56d554 orphan changes 
* daa016c some changes 
* 1523991 mainline 

Как вы можете применить это к вашей ситуации без рубящих всех ваших слияний совершают?

  1. git checkout -b flattening <just after orphaned merge commit>
  2. git rebase <commit before orphaned merge commit>
  3. git checkout master
  4. git rebase -p <just after orphaned merge commit> --onto flattening
+0

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