Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你怎么能';重复使用';git分支安全_Git_Version Control_Branch_Git Merge_Git Reset - Fatal编程技术网

你怎么能';重复使用';git分支安全

你怎么能';重复使用';git分支安全,git,version-control,branch,git-merge,git-reset,Git,Version Control,Branch,Git Merge,Git Reset,我需要找到一种方法来将Git分支更新为新的ref,这样从客户机的角度来看,就可以创建一个新的分支。我心中有一个过程,但我想就我没有考虑的边缘案例提供建议 这里的用例是我们在master中开发的,希望定期冻结代码,并将发布分支更新到master所在的位置。我们不希望每次都创建一个新分支,因为我们的自动化需要更新才能使用新分支 通过这个过程,我们限制了谁以及如何发布提交(cherry最终只从master中挑选),所以发布中不应该有不在master中的提交。虽然这个过程从来都不是完美的,但我还是想谨慎

我需要找到一种方法来将Git分支更新为新的ref,这样从客户机的角度来看,就可以创建一个新的分支。我心中有一个过程,但我想就我没有考虑的边缘案例提供建议

这里的用例是我们在master中开发的,希望定期冻结代码,并将发布分支更新到master所在的位置。我们不希望每次都创建一个新分支,因为我们的自动化需要更新才能使用新分支

通过这个过程,我们限制了谁以及如何发布提交(cherry最终只从master中挑选),所以发布中不应该有不在master中的提交。虽然这个过程从来都不是完美的,但我还是想谨慎一点

现在,我正计划通过以下方式使用“重置--hard”:

git checkout master
MASTER_HEAD=`git rev-parse HEAD`
git checkout release
git reset --hard $MASTER_HEAD
git push -f origin
这有点吓人,因为如果一个提交确实进入了主控之外的发布,那么它就有可能在下一次拉某人的时候进入发布。任何强迫的推搡都会把我吓坏

我也看过“更新参考”,但我还不明白


最后一种方法是在剪切发布后,标记发布分支并删除分支。然后,当代码冻结再次发生时,从master重新创建释放。这里的缺点是,由于分支不再存在,任何自动化也需要禁用。

更新远程分支的方法似乎是正确的

一个警告是,如果一个新的提交被推到
release
,而不是以前的
release
s的快速后续提交,那么如果有人在哪里更新他们的本地
release
分支通过通常的
git pull
,则可能会出现不希望的合并

本地
发行版
分支机构的任何更新都应通过以下方式完成:

git fetch
git reset --hard origin/release

我认为这可以通过将master合并到release中以一种更简单的方式解决。我不明白为什么会有问题,如果有充分的理由,请告诉我们。我会做以下几件事:

git checkout rebase
git merge master
git push -f origin

我不太清楚,但你似乎无缘无故地经历了很多痛苦和痛苦。请原谅我的假设,但这似乎是对您的自动化的
增强
,允许它更改为新的发布分支将是微不足道的。我想,要想得到你想要的东西,最好的办法就是在
master
brancha
release
上下功夫。在
release
中进行发布修复,并将相关修复合并回
master
。一旦你对
发行版满意了
标记它,停止对该分支的工作,并为下一个发行版创建一个新的分支。现在有一个很好的遗留自动化功能不容易更新。这就是保持一个分支名称背后的推动力。我们当前的git结构也造成了问题,所以这比更新所有的自动化更重要。如果你真的被卡住了,那么你就被卡住了,但我会小心使用“安全”这个词。记住,unix的设计理念在git中非常强大。特别是它不会阻止你做愚蠢的事情,因为那会阻止你做聪明的事情。你可以使用组成
分支的
ref
对象,但是你必须使用你的判断来判断你所做的是
愚蠢的
还是
聪明的
,这将是非常棒的,但由于我不想说的原因和我无法控制的原因,这是不可能的。这正是我问题的症结所在。有很多承诺我们也不想参与,我不相信每次都会发生。git钩子可以防止它,但它会很昂贵,我们永远无法关闭它,因为从现在起一两年后,有人可能会使用一台旧计算机,而在执行拉操作时却不记得这样做。