git удалить ветку без удаления коммитов - PullRequest
2 голосов
/ 29 марта 2012

У меня есть две ветви, над которыми я обычно работаю: master и homepage_buildout. Мне недавно сказали проверить старый коммит, прежде чем я работал над проектом. Я просто сделал:

 git checkout [commit number]

Тогда я решил сделать этот старый коммит веткой вот так:

 git checkout -b old_homepage

Теперь я понял, что мне больше не нужно ссылаться на ветку old_homepage, но я все еще хочу, чтобы она существовала как коммит. Как мне сохранить эти коммиты, но удалить ветку, когда я набираю:

 git branch

Ответы [ 3 ]

9 голосов
/ 30 марта 2012

Я думаю , что вы на самом деле просите, сводится к: «если я сделаю git branch -d old_homepage потеряет ли коммиты», и ответ: «Удаление имени удаляет только имя ; сами коммиты остаются до тех пор, пока вы можете видеть их в git log --all, а на самом деле даже дольше. "

Чтобы лучше это представить, запустите что-то вроде gitk --all или gitk --tags (попробуйте оба на некоторых сложных репозиториях git).Прокрутите коммиты.Теперь представьте себе, что вы делаете заметку на любом коммите.Это имя тега или ветви.Сними записку.Коммит еще там, верно?: -)

Остается один очевидный вопрос: когда такие вещи, как коммиты на самом деле уходят?Ответ таков: только после удаления всех имен, которые к ним приводят.Команда gitk (как и большинство других команд git) начинается с имени HEAD.Если вы дадите ему --all, он добавит все имена ветвей, которые сможет найти.Если вы дадите ему --tags, он добавит все имена тегов, которые сможет найти.Затем он работает в обратном направлении, просматривая каждый коммит, чтобы увидеть, на какие другие коммиты он ссылается.

Git удаляет вещи (коммиты и т. Д.), Когда нет способа найти их, начиная с одного из этих очевидныхимена и работа в обратном направлении.(Даже тогда он ждет долго, от 30 до 90 дней по умолчанию.) Таким образом, если вы добавите метку ветки или тега к старому коммиту, номер которого вы нашли, например, с помощью git log, это даст вам новое очевидное имядля этого номера коммита;но удаление снова безопасно, если это не только способ найти его по имени.

3 голосов
/ 29 марта 2012

Вы можете пометить коммит:

$ git tag <tagname> <commit-hash>

Поскольку тег ссылается на коммит, он не будет собирать мусор.

0 голосов
/ 29 марта 2012

Я не совсем уверен, но в такой ситуации вы обычно используете тег.

git tag <some-name> <commit-id>

Это не будет отображаться в git-branch, но git-tag покажет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...