Вопрос

Исходя из SVN, просто начинаю ознакомиться с Git.

Когда ветка удаляется в Git, это удалено из истории?

В SVN вы можете легко восстановить ветку, вернув операцию удаления (обратное объединение). Как и все удаления в SVN, ветвь никогда не удаляется, она просто удаляется с текущего дерева.

Если ветвь фактически удаляется из истории в Git, что происходит с изменениями, которые были объединены из этой ветви? Они сохраняются?

Это было полезно?

Решение

Филиалы - это только указатели, чтобы комбинироваться в Git. В Git каждый коммит имеет полное исходное дерево, это очень разная структура из SVN, где все ветви и теги (по соглашению) живут в отдельных «папках» хранилища вместе с особым «багажником».

Если ветвь была объединена в другую ветку, прежде чем она была удалена, то все коммиты все равно будут доступны от другого ветвления, когда первая ветвь удалена. Они остаются именно так, как они были.

Если ветвь удаляется без объединения в другую ветку, то коммиты в этой ветви (до того, как до такой степени, когда развесел из фиксатора, который все еще достигнут), перестанет быть видимым.

Обиты все еще будут сохраняться в репозитории, и можно сразу же восстановить после удаления, но в конце концов они будут собраны мусор.

Другие советы

В Git филиалы являются лишь указателями (ссылками) для обменивания направленного ациклического графа (DAG) коммитов. Это означает, что удаление филиала удаляет только ссылки на коммиты, которые могут заставить некоторые коммиты в DAG недоступны, таким образом, невидимым. Но все комбиниты, которые были на удаленном ветке, все равно будут в репозитории, по крайней мере, до того, как недостижимые коммиты обрезаются (например, использование git gc).

Обратите внимание, что git branch -d будет отказываться удалять ветку, если не может быть уверена, что удаление этого не оставит недоступных коммитов. Вам нужно использовать более сильнее git branch -D Чтобы принудительно удалить ветвь, если она может оставить недоступные коммиты.

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

---- o ---- * ---------- / m ---- * <- Master <- head  /  --. ---- .---- / - - X --- Y <- Удаленная ветка

Только комбинирует «X» и «Y» станет недоступным после удаления ветви.

Если вы работаете на удаленном ветке в пределах gc.reflogExpire Период, по умолчанию 90 дней, у вас будет последний кончик удаленной ветви, записанной в голову Refrold (см. git reflog show HEAD, или git log --oneline --walk-reflogs HEAD). Вы должны быть в состоянии использовать Head Refrold для восстановления удаленного указателя. Обратите внимание также, что в этом случае недоступные коммиты только в удаленном ветке будут защищены от обрезки (удаления) в пределах gc.reflogExpireUnreachable Период, который по умолчанию составляет 30 дней.

Если вы не можете найти кончик просто удаленной ветки в Refrold для головы, вы можете попробовать использовать git fsck найти «недостижимый коммитu003Csha1> «И проверяйте тех (через git show <sha1> или git log <sha1>) Чтобы найти кончик удаленной ветки.

Независимо от того, как вы найдете верхушку удаленной ветви, вы можете отменить удаление или, скорее повторно создать просто удаленную ветку, используя

git branch <deleted-branch> <found-sha1-id>

Обратите внимание, однако, что Refrold для ветви будет потерян.


Существует также git-resurrect.sh. скрипт внутри contrib/ Что помогает находить следы кончика ветви с указанным именем и воскреснутую (восстановление).

Если вы беспокоитесь о случайно удаленных филиалах, и у вас больше нет локальной копии вашего репо, есть расширения для серверов Enterprise Git, такие как Gerrit, которые обнаружит историю, перезаписывающую и отделение отделения, вернут их под специальное Ref, чтобы они Может быть восстановлен при необходимости и не будет обрезан сборной мусора. Администраторы Gerrit могут по-прежнему удалить выбранные коммиты, если это необходимо по юридическим причинам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top