在 git 中指定一个单向分支
Specify a one-direction branch in git
假设一个回购有一个 master
分支和一个 junk
分支。有没有办法配置 git 以确保我和我的同事永远不会将 junk
合并到 master
?
简短的回答是否定的。特别是 Git 根本没有真正合并 branches;它合并了 提交 。像 junk
这样的分支名称只是一个标记,意思是“最新的此类提交”,Git 为您保持最新。但是既然你可以 运行:
git merge a123456
这是哈希 ID 而不是分支名称,如果该提交是 junk
分支上的最新提交,则该提交(“该分支”)将合并到当前分支中,即使当前分支是 master
,并且不会有任何迹象表明这是将 junk
合并到 master
,即使它正在做完全相同的事情。
综上所述,您 可以 使用各种 Git 钩子,或者避免直接使用 git
命令本身,以试图阻止您自己制作错误。例如,编写您自己的 front-end 命令——我在这里将其称为 mgit
以表示 my git
,但您可以根据需要将其命名为 git
,只要您使它调用“真正的 Git” 不知何故——让你的 mgit merge
检查:
mgit() {
local subcmd=""
case "$subcmd" in
merge)
# if current branch is master and argument is junk, error
... write code here ...
;;
... add additional subcommands here ...
esac
}
写 mgit
只是一个 Small Matter of Programming,现在你有一个命令可以做你想做的事。
(至于 Git 钩子,目前在正确的地方还有 none 来阻止你自己犯这个特定的错误,所以不要那样做,除非你想得到真正参与了 Git 项目。正在进行的工作是使 hooks 更可用、更友好等等,你可以参与其中。)
假设一个回购有一个 master
分支和一个 junk
分支。有没有办法配置 git 以确保我和我的同事永远不会将 junk
合并到 master
?
简短的回答是否定的。特别是 Git 根本没有真正合并 branches;它合并了 提交 。像 junk
这样的分支名称只是一个标记,意思是“最新的此类提交”,Git 为您保持最新。但是既然你可以 运行:
git merge a123456
这是哈希 ID 而不是分支名称,如果该提交是 junk
分支上的最新提交,则该提交(“该分支”)将合并到当前分支中,即使当前分支是 master
,并且不会有任何迹象表明这是将 junk
合并到 master
,即使它正在做完全相同的事情。
综上所述,您 可以 使用各种 Git 钩子,或者避免直接使用 git
命令本身,以试图阻止您自己制作错误。例如,编写您自己的 front-end 命令——我在这里将其称为 mgit
以表示 my git
,但您可以根据需要将其命名为 git
,只要您使它调用“真正的 Git” 不知何故——让你的 mgit merge
检查:
mgit() {
local subcmd=""
case "$subcmd" in
merge)
# if current branch is master and argument is junk, error
... write code here ...
;;
... add additional subcommands here ...
esac
}
写 mgit
只是一个 Small Matter of Programming,现在你有一个命令可以做你想做的事。
(至于 Git 钩子,目前在正确的地方还有 none 来阻止你自己犯这个特定的错误,所以不要那样做,除非你想得到真正参与了 Git 项目。正在进行的工作是使 hooks 更可用、更友好等等,你可以参与其中。)