Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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 sqash和rebase工作流,带有暂存和主分支_Git_Merge_Version Control_Rebase_Squash - Fatal编程技术网

Git sqash和rebase工作流,带有暂存和主分支

Git sqash和rebase工作流,带有暂存和主分支,git,merge,version-control,rebase,squash,Git,Merge,Version Control,Rebase,Squash,关于“Git工作流和Rebase”还有很多问题,但是我找不到一个解决这个问题的方法:我们使用master分支,该分支部署到生产环境中,但也部署到测试服务器上 大多数教程,例如,解释如何创建一个功能分支,如果有多个提交,则挤压它们,然后在master上重新设置基址,最后将该分支合并到master 这将类似于以下内容: git checkout -b featureX # create feature branch # do work on feature branch git add . git

关于“Git工作流和Rebase”还有很多问题,但是我找不到一个解决这个问题的方法:我们使用
master
分支,该分支部署到生产环境中,但也部署到测试服务器上

大多数教程,例如,解释如何创建一个功能分支,如果有多个提交,则挤压它们,然后在
master
上重新设置基址,最后将该分支合并到
master

这将类似于以下内容:

git checkout -b featureX # create feature branch

# do work on feature branch
git add .
git commit -m "commit 1"
git add .
git commit -m "commit 2"

git rebase -i HEAD~2 # squash into 1 commit
git checkout master 
git pull origin master # update master
git checkout featureX
git rebase master # rebase onto master
git push origin featureX
git checkout master
git merge featureX # merge feature
git push origin master
如果我们首先想将我们的功能分支合并到
staging
,在那里测试东西,并且只有在工作正常的情况下,才将它合并到
master
,那么工作流会是什么样子呢?

我们是否必须首先在
staging
上重新基址,合并到其中,测试它,然后在master上重新基址,然后合并它?如果是这样,这是否意味着我们应该定期删除
staging
并再次将其分支出
master
,以保持一个干净的
staging
分支?如果我们已经将某些内容合并到了“暂存”中,发现某些内容不起作用,需要在功能分支中进行更改,会发生什么情况?我们会再次挤压该分支,但是现在
staging
已经合并了功能分支的旧版本,在这种情况下,我们是否需要删除
staging
并再次将其分支到master?如果不是只有一个功能分支合并到其中,而是两个功能分支会怎么样?

我会这样做:功能分支将从暂存分支。准备就绪后,将功能重设到暂存上,然后将功能合并到暂存中。如果该功能存在问题,请再次分支该功能并向该功能提交修复。然后重新设置基址并再次将特征合并到阶段中。如果决定需要删除该功能,则您将恢复该功能合并提交。由于暂存是由多人使用的已发布分支,请不要重新设置暂存的基础。准备好后,您可以将暂存合并到master中。@DavidSugar因此,让我们假设我们已经将
featureX
staging
分支,压缩
featureX
,并将其重设为
staging
,将其合并到暂存中。如果我们必须再次更改有关
featureX
的某些内容,您会删除
featureX
分支并创建一个新分支吗?或者,您是否会保留featureX,向其添加提交,再次挤压并重新设置其基础,然后将其再次合并到“暂存”中?合并featureX分支时,您将删除它。(这仍然会保留提交。删除分支只会删除指针。)然后,当您决定需要对featureX进行更多工作时,您可以从暂存中创建一个新的featureX分支。但这不是仍然存在问题,即最终我们将进行两次提交,如果使用
git-bisect
,这可能是个问题,因为我们的状态可能不一致,不是吗?对于
featureX
,我们将有2个(或更多)提交。这不是问题。第一次提交被发现有缺陷,我们需要进行额外的提交来实现
featureX
。我们不想因为其他人正在使用
staging
而对其进行重新设置,我们也不想隐藏我们在两个或多个部分中实现了
featureX
这一事实
git bisect
将帮助我们定位问题——如果在第二次
featureX
commit之后发现了一个bug,但在第一次提交之后却看不到该bug,这可以帮助我们找到bug的来源。有两个或多个
featureX
committes没有不一致的状态。我将这样做:功能分支将从暂存分支。准备就绪后,将功能重设到暂存上,然后将功能合并到暂存中。如果该功能存在问题,请再次分支该功能并向该功能提交修复。然后重新设置基址并再次将特征合并到阶段中。如果决定需要删除该功能,则您将恢复该功能合并提交。由于暂存是由多人使用的已发布分支,请不要重新设置暂存的基础。准备好后,您可以将暂存合并到master中。@DavidSugar因此,让我们假设我们已经将
featureX
staging
分支,压缩
featureX
,并将其重设为
staging
,将其合并到暂存中。如果我们必须再次更改有关
featureX
的某些内容,您会删除
featureX
分支并创建一个新分支吗?或者,您是否会保留featureX,向其添加提交,再次挤压并重新设置其基础,然后将其再次合并到“暂存”中?合并featureX分支时,您将删除它。(这仍然会保留提交。删除分支只会删除指针。)然后,当您决定需要对featureX进行更多工作时,您可以从暂存中创建一个新的featureX分支。但这不是仍然存在问题,即最终我们将进行两次提交,如果使用
git-bisect
,这可能是个问题,因为我们的状态可能不一致,不是吗?对于
featureX
,我们将有2个(或更多)提交。这不是问题。第一次提交被发现有缺陷,我们需要进行额外的提交来实现
featureX
。我们不想因为其他人正在使用
staging
而对其进行重新设置,我们也不想隐藏我们在两个或多个部分中实现了
featureX
这一事实
git bisect
将帮助我们定位问题——如果在第二次
featureX
commit之后发现了一个bug,但在第一次提交之后却看不到该bug,这可以帮助我们找到bug的来源。有两个或多个
featureX
提交时不会出现不一致的状态。