2017-01-26 14 views
0

Я не просто говорю об указателе отрасли :-)Могу ли я удалить целую ветку из репозитория git?

Скажем, у меня уже полностью объединенная ветвь, и теперь я хочу, чтобы она выглядела так, как будто ветка никогда не существовала. Мне кажется, что я должен полностью обрезать эту ветку из репо (т. Е. Удалить все коммиты на этой ветви, чтобы она никогда не показывалась в истории), не жертвуя целостностью. Есть ли способ сделать это?

Можно ли оттолкнуть оставшуюся ветку вверх по течению, не нажимая ту, которую я бы забыл?

EDIT: Я добавил в качестве примера, чтобы попытаться проиллюстрировать это лучше

git checkout master 
git commit -m "C1" 
git branch b1 
git commit -m "C2" 
git checkout b1 
git commit -m "C3" 
git checkout master 
git merge -m "C4" b1 
git branch -d b1 

дает этот результат

--C1--+----C2----+--C4 
     \  /
     +--C3--+ 

, что я хочу сделать, это удалить С3, но оставить C4 точно так, как есть, так что история выглядит линейной. Это, мне кажется, ша-1 С4 будет то же самое или нет там C3, так что я не понимаю, почему я должен нужно перебазироваться/вишня выбор, чтобы сделать это

+0

Вы знаете, филиал является указателем. Предположим, у вас есть два имени: Том и Джек. Вы - фиксация, Джек и Том - две ветви. Что произойдет с Томом, если удалите имя Джека и выровняйте его? – ElpieKay

ответ

-1

Вы пытаетесь использовать:

$git branch -d?

2

Да, это возможно, чтобы полностью удалить ветку:

git branch -D branchname 
git push origin :branchname 

-D есть сила, чтобы удалить ветвь даже ветвь не слита.

+0

Мне кажется, что это просто удаление указателя ветки. Я хочу удалить фактическую ветвь (т. Е. Все коммиты, которые были на этой ветке) – Andy

+0

@Andy Если вы удалите ветку, и на фиксации не указали никакие другие ссылки ref (branch, tag ...), то сборщик мусора очистит их. Если они ссылаются на другие ссылки, вы не можете избавиться от них, «не жертвуя целостностью». –

+0

@ Энди, на самом деле он удаляет ветку, а не указатель. Так же, как сказал Дэн Лоу, если некоторые фиксации ветви также являются частью других ветвей, поэтому вы не можете удалить эти коммиты. –

0

Вы можете сделать это с помощью следующих команд:

git branch -D branchname. 
git reflog expire --expire=now --all 
git gc --aggressive --prune=now 
git repack -a -d -l 

Более подробной информации о каждой команде предоставляется по мерзавцу документации: https://git-scm.com/docs

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

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