2012-06-12 3 views
18

Предположим, у меня есть ветка развития. Я создаю ветку признаков из этого для разработки функции. После того, как эта функция разработана, она снова объединяется в разработку. Довольно много, как показано здесь:Замораживание ветки Git

enter image description here

Есть ли способ я могу заморозить ветвь функции, так что никаких дополнительных фиксаций не может быть с ним?

Причина не в том, что удаленная ветка удалена, так что просмотр истории все еще может отображать ветвь функции, и если в настройке должна быть настройка, то для кого-то возможно создать новую ветвь функции от последнего фиксации предыдущей функции.

ответ

14

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

Во-первых, слияние филиал в разработке

git checkout develop 
git merge --no-ff feature_1 

Затем проверка филиала

git checkout feature_1 

Затем создайте тег, с комментарием.

git tag -a -m "Freezing a feature branch that fixes.." feature_1_frozen 

Затем удалите ветвь

git checkout develop 
git branch -d feature_1 

После этого, вы не сможете оформить ветку по имени. Вместо этого вы сможете проверить тег по имени, это приведет вас в состояние отдельной головы, которое сдерживает изменения кода.

Теперь обернуть вещи и синхронизировать с источником ...

Нажмите на обновление и новый тег

git push --tags origin develop 

Удалить удаленный филиал функции

git push origin :feature_1 
+0

Стоит отметить, что это удалит его только из локального репозитория. Чтобы другие не могли захватить его в своих локальных репозиториях, вам нужно удалить его на пульте дистанционного управления с помощью git push : feature_1'.Вы бы определенно хотели, чтобы в этом случае было имя тега, которое включает имя ветки, иначе вы в какой-то момент в будущем будете создавать путаницу, когда кто-то захочет найти это состояние. – Christopher

+0

Итак, чтобы быть понятным, команда удаления ветви не удаляет коммиты из этой ветви, она просто удаляет имя ветви? – millie

+0

Филиалы являются указателями на конкретные фиксации. Здесь есть хорошее объяснение: http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is. Пока тега commit существует в примере gjcamann, вы должны иметь возможность достичь этого состояния фиксации. Я неоднозначно отношусь к удалению ветки, поскольку я думаю, что это запутается: «Подождите, что вызвала эта ветка? Хммм. Не могу вспомнить имя тега. Это было два месяца назад. Лучше копайте». но это только личное предпочтение. Независимо от того, удаляете ли вы удаленное отделение, зависит ваш уровень комфорта и рабочий процесс. – Christopher

8

Просто помечать его.

git tag -a frozen -m "Feature branch frozen here." 
git push <remote> frozen 

Конечно, кто-то может прийти позже и нажать на ветку, но тег не должен измениться, если это не принудительно отменяют. Вы можете настроить свой пульт, чтобы отклонить принудительные нажатия, если вас это беспокоит, или even sign the tags with a GPG key to ensure authenticity.

Получение состояния ветви функции, когда оно было заморожено, так же просто, как git checkout frozen. Разработчики могут перейти от этого пункта по своему усмотрению, используя одну команду: git checkout -B <new_branch> frozen.

+0

Просто чтобы быть ясно, если кто-то придет и делать коммиты на «замороженном» отрасли, это тривиально, чтобы бросить эти изменения в сторону и установить его обратно где он должен был быть. Просто «git reset - hard frozen» в то время как на ветке. – wadesworld

0

Я использую "Git Bash" консоль, чтобы заморозить ветвь:

Не имею Git Bash?

Вот как установить и использовать консоль Git Bash:

Ссылка:

https://github.com/msysgit/msysgit/releases/

https://help.github.com/articles/set-up-git/

Как заморозить филиал

git checkout {branch-to-keep-alive} 
git merge --no-ff {branch-to-freeze} 

Если git запрашивает сообщение о слиянии, введите его, затем используйте клавишу [Esc], затем введите команду «: wq» для сохранения и выхода.

Вам нужно пойти в визуальную студию и убедиться, что вы можете успешно построить решение (с помощью {branch-to-keep-alive}). Конвенция

git checkout {branch-to-freeze} 

git tag -a -m "{your-description}" {tag-for-the-branch-to-freeze} 

: создать тег так: {ветвей имя} _frozen

git checkout {branch-to-keep-alive} 

git branch -d {branch-to-freeze} 

git push --tags origin {branch-to-keep-alive} 

git push origin :{branch-to-freeze} 

Как слить ветку с мастером:

git checkout {your-working-branch} 

Мастер слияния Git

Открыть vs и разрешить конфликты слияния, если они есть. Всегда перестраивайте все.

git checkout master 
git merge development 

Конфликтов сейчас не будет, и все будет готово.

Git Bash Console:

enter image description here

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