Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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_Git Branch_Gerrit_Branching And Merging - Fatal编程技术网

Git-在功能分支重基后推送

Git-在功能分支重基后推送,git,git-branch,gerrit,branching-and-merging,Git,Git Branch,Gerrit,Branching And Merging,我有一份git回购协议,目前我在feature分支工作 我有这样的想法: dev: ---1--2--3-- \ fb: --f1 当我在处理我的特性分支时,发生了更多对dev的提交,所以我重新对它进行了调整,现在我提交的内容发生了变化 dev: ---1--2--3--4--5---- \ fb: --f1(another) 因此,现在我无法将其推送到

我有一份git回购协议,目前我在feature分支工作

我有这样的想法:

dev: ---1--2--3--
                \
fb:              --f1
当我在处理我的特性分支时,发生了更多对dev的提交,所以我重新对它进行了调整,现在我提交的内容发生了变化

dev: ---1--2--3--4--5----
                      \
fb:                    --f1(another)
因此,现在我无法将其推送到远程功能分支,因为SHA无效。I无法强制推送,因为服务器禁止推送


那么,在这种情况下,正确的工作流程是什么?我应该怎么做

例如,您可以执行以下操作之一:

  • 删除远程分支,然后推送本地分支
  • 将本地分支推送到新命名的远程分支
  • 撤消重基并执行合并
  • 说服存储库宿主允许强制推送,然后强制推送您的本地分支

    • 我的建议是
      将远程/dev合并到本地/fb
      删除远程/fb
      ,然后使用git历史推送本地/fb

      • 撤消重设基础并将远程/dev合并到本地/fb

        # undo rebase: reset your local/fb with remote/fb
        $ git checkout fb
        $ git reset --hard origin/fb
        
        # merge and push to remote/fb 
        $ git pull origin dev
        $ git push origin fb
        
        $ git push origin --delete fb      # delete remote/fb branch
        $ git push origin fb  
        
      • 删除远程/fb分支,然后将您的本地/fb与历史一起推送

        # undo rebase: reset your local/fb with remote/fb
        $ git checkout fb
        $ git reset --hard origin/fb
        
        # merge and push to remote/fb 
        $ git pull origin dev
        $ git push origin fb
        
        $ git push origin --delete fb      # delete remote/fb branch
        $ git push origin fb  
        

      这取决于公司/团队的总体工作流程。然而,他们可能还没有完全考虑清楚

      防止强制推送所有分支和要求重新设置特征分支的基础是相互矛盾的。这两件事都可以是工作流的合理部分,但不是同一个工作流

      两个选项

      如果在您的公司内必须拒绝强制推送功能分支,其结果是您无法重新设置这些功能分支的基础。您将需要执行非快进合并

      如果您的公司希望您重新设定功能分支的基础,那么他们必须使回购接受对这些功能分支的强制推送。让git deny只对某些分支而不是所有分支强制推送是非常容易的

      草率的解决办法

      当然,您可以在每次重设基准时删除要素分支,并每次创建一个新分支。这是非常草率的,并且会导致大量不必要的分支。您的公司/团队应该仔细考虑他们的工作流程策略,以避免此类事情