假设我有一个开发分支。我从中创建了一个功能分支来开发一个功能。一旦开发了该功能,它就会合并回到开发中。非常像这里显示的那样:
有没有办法可以冻结功能分支,以便不再进行提交?
不直接删除分支的原因是查看历史记录仍然可以显示功能分支,如果需要对功能进行调整,则有人可以从该功能创建新功能分支。最后一次提交上一个功能。
答案 0 :(得分:16)
克里斯托弗是对的,标记会帮助你做到这一点。我建议删除分支名称,以使某人更难以签出分支并进行编辑。
首先,将分支合并到develop
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
答案 1 :(得分: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
。
答案 2 :(得分:2)
您可以使用 gitolite 或 gerrit 等内容来访问分支,标记和存储库中的访问控制和权限。
看看这里:
答案 3 :(得分:1)
答案 4 :(得分: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 checkout {branch-to-freeze}
git tag -a -m "{your-description}" {tag-for-the-branch-to-freeze}
约定:创建如下标记:{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}
如何将分支与master合并:
git checkout {your-working-branch}
Git merge master
git checkout master
git merge development
Git Bash控制台: