Вопрос по git, git-branch, branch – Замораживание ветки Git

19

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

enter image description here

Is there a way I can freeze the feature branch so that no further commits can be made to it?

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

Связанный пост -What is a “stale” git branch? RBT

Ваш Ответ

5   ответов
2

Вы могли бы использовать что-то вродеgitolite или жеgerrit для контроля доступа и разрешения вдоль веток, тегов и репозиториев.

Посмотрите здесь:

https://stackoverflow.com/a/10897484/462233 http://sitaramc.github.com/gitolite/
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
Так что, для ясности, команда для удаления ветви не удаляет коммиты из этой ветви, она просто удаляет имя ветви? millie
Ветви - это указатели на конкретные коммиты. Здесь хорошее объяснение:git-scm.com/book/en/Git-Branching-What-a-Branch-Is, Пока тэг commit существует в примере gjcamann, вы должны быть в состоянии достичь этого состояния фиксации. У меня двойственное отношение к удалению ветки, так как я думаю, что это сбивает с толку "Подождите, как называется эта ветка? Хммм. Не могу вспомнить имя тега. Это было два месяца назад. Лучше иди копай. & Quot; но это просто личное предпочтение. То, удаляете ли вы удаленную ветку или нет, зависит от вашего уровня комфорта и рабочего процесса.
Милли, ты права. Удаление ветки только удаляет имя ветки, вся история все еще там - это наиболее очевидно при использовании gitk.
Стоит отметить, что это приведет к удалению только из вашего локального репозитория. Чтобы другие пользователи не могли захватить его в своих локальных репозиториях, вам нужно удалить его на удаленном компьютере с помощьюgit push <remote> :feature_1, Вы определенно хотите, чтобы имя тега включало в себя имя ветви в этом случае, иначе вы можете вызвать путаницу в какой-то момент в будущем, когда кто-то захочет найти это состояние.
8

Просто пометьте это.

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

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

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

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

Я использую "Git Bash" Консоль для заморозки ветки:

У тебя нет Git Bash?

Here is how to install and use the Git Bash console:

Ссылка:

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

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

How to freeze a branch

git checkout {branch-to-keep-alive}
git merge --no-ff {branch-to-freeze} 
If git asks for a merge message, type it, then use [Esc] key then type ":wq" command to save and exit. You have to go to visual studio and make sure that you can build the solution success,fully (with {branch-to-keep-alive}).
git checkout {branch-to-freeze} 

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

Convention: create the tag like this: {branch-name}_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} 

How to merge a branch with master:

git checkout {your-working-branch} 

Git merge master

Open vs and resolve merge conflicts if there is any. Always rebuild the whole things.
git checkout master
git merge development
There won't be any conflicts now and everything is set to go.

Git Bash Console:

enter image description here

Похожие вопросы