git,把一个分支推到另一个分支干什么



用例:我们有5个分支机构,用于5个环境。例如,main=env1,test=env2,experiive=env5

当我们更新分支时,它会自动构建并部署到相应的env。

我有一些测试代码,我想在实验环境env5上试用(我可能会在这个过程中破坏(

我可以签出实验分支,签出主分支(我们所有的生产代码都在那里(,合并主分支和实验分支(所以实验是最新的,与主分支相同(,更改一些东西,提交我的分支,将我的分支与实验分支合并,然后将实验分支推回到原点。

这是有效的,但有一个很大的缺点,下一个使用实验的人会得到我的(可能坏了(测试代码。

我可以试着";重置";实验分支回到了我开始之前的提交,但这在一定程度上超出了我的专业水平。

有人说我可以这样做:

  1. checkout main
  2. 拉力
  3. git checkout-b my_experiment
  4. 做一些更改
  5. 提交我的更改
  6. git推送起源my_experiment:实验
  7. 做一些测试

关键是步骤6中发生了什么?它是如何将我的更改与实验分支合并的,以及我如何在之后将其设置为与main相同(这样下一个使用实验分支的人就不会得到我的更改(

===更新===

从下面有用的评论中,我想我错过了一步:

实验:

  1. git checkout main
  2. git pull
  3. git校验实验
  4. git pull
  5. git merge main<==使实验分支与主要分支保持同步
  6. //现在我有了最新的实验分支
  7. git checkout-b my_experimental<=这现在是实验的一个分支,而不是主要的
  8. 做一些改变
  9. git提交
  10. git push origin my_experimental:实验

恢复(这样其他人就不会得到我的代码(

  1. git推送原点实验:实验

这行得通吗?还是我需要"-f";在推中?

git中的分支是指向特定提交的指针,仅此而已。

push命令请求远程服务器将特定分支指向特定提交。它永远不会执行合并,而合并必须首先在本地进行。当您指定一个分支作为源时,这只是指定提交的一种方式:无论该名称的本地分支当前指向什么提交。

默认情况下,远程服务器将拒绝任何不是"推送"的推送;快进"-也就是说,推送的新提交在其历史中没有以前的分支位置。如果指定--force或稍微安全一点的--force-with-lease,则将完全忽略远程服务器上的当前分支位置,并仅使分支指向您要求的任何提交。

("with lease"意味着git将检查自您上次提取远程分支以来是否有其他人更改了该分支,这样您就可以随时知道您正在覆盖什么。(

因此,实现您正在讨论的内容的一种方法是:

# overwrite "experimental" with whatever branch you want to test
git push --force-with-lease origin my_experiment:experimental
# once you've tested, overwrite it again with something else
git push --force-with-lease origin main:experimental

如果你担心其他开发人员在指向你的测试版本时拉实验分支,你真的无法阻止,所以我提出了一个不同的过程。

你能重新配置你的持续集成系统,这样分支我的实验将部署到env5吗?

这种方式分支";实验性的";不必因测试更改而损坏。

您可以将两个分支都设置为部署到env5。

最新更新