Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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_Merge_Branch - Fatal编程技术网

哪种方式与git合并?

哪种方式与git合并?,git,merge,branch,Git,Merge,Branch,假设我有两个分支 master -- A - - - - - - merge \ / \- develop -- B -- C 现在,如果我想合并它将是一个快进,但我应该这样做吗 git checkout develop git merge master 或 如果我有可能的冲突呢 master -- A - D - - - - - -merge \

假设我有两个分支

master -- A -   -   -   -   -  - merge
          \                    /
           \- develop -- B -- C
现在,如果我想合并它将是一个快进,但我应该这样做吗

git checkout develop
git merge master

如果我有可能的冲突呢

master -- A - D -  -  -  -  -  -merge
          \                   /
           \- develop -- B -- C

我现在应该合并到开发中还是合并到master中?这有点让人困惑,因此,如果能提供一个好的解释,我们将不胜感激。

请在主程序中执行第二个操作,合并

我通常将master重设为origin,将dev重设为master,然后合并。这使得在重设基础时出现冲突;如果执行此操作,则不会出现合并冲突。

缺少工作流任务 首先,您的工作流程中缺少一些东西,这使得您很难以真实的方式回答问题。例如:

git rebase -i master
  • 在合并分支之前,应始终从上游提取。其他人可能以你没有考虑到的方式改变、发展或掌握

  • 您还没有确定哪一条是您的长期发展路线。一个假设是开发,但这只是一个猜测,因为您还没有确定合并后分支会发生什么

  • 重定长寿命分支的一般最佳做法 因此,假设您已经提前更新了分支,并且master和developer都是长期存在的分支,master是完整代码的“官方”分支,那么您应该按照这些思路做一些事情

  • 在开发的基础上做一个临时的重新定基分支

  • 将您的工作重定到master上,以确保干净的快进合并。我想让这成为一个互动的基础,但你想怎么做就怎么做。例如:

    git rebase -i master
    
  • 合并到主机上。我更愿意强制合并是一个快进的过程,但是你可以做任何适合你的事情

    git checkout master
    git merge --ff-only tmp
    
  • 确保合并的分支可以干净地推送

    git push origin
    
  • 如果一切顺利,就把你的临时分公司处理掉

    git branch -d tmp
    
  • 将主控与开发重新合并为合并提交,而不是快进。这将使您的发展与主分支保持一致,以便继续工作

    git checkout develop
    git merge master
    git push origin
    
  • 自然后果 这样做可以确保主分支上的历史记录是相对线性的,没有合并冲突,并且仍然允许您在需要时重新设置基址,而不会破坏已发布的分支。这些都是积极的东西


    然而,这个过程可能会给develope留下复杂的合并历史,因为从master到develope的重新合并可能并不总是一个快速的合并。这本身不是一个问题,它只是任何包含重定基址的工作流的自然结果。这是需要注意的,但在我看来,为团队提供的灵活性付出的代价是值得的。

    在gitimmersion,我读到在进行公共回购时,重新定价不是一个好做法,因为它可能会让其他用户感到困惑。我可以用你的常规来避免吗如果分支是公共的,并且与其他人共享,则不要使用rebase。重写公共共享的分支会使团队的其他成员陷入困境。当提交分支的确切历史非常重要时(因为rebase重写了提交历史)。根据上述指导原则,我倾向于对短期的本地分支使用rebase,对公共存储库中的分支使用merge。对,对开发分支使用rebase是可以的,您永远不会对主分支使用rebase。为了完整性,请注意,您的第一个选项实际上是无操作,因为您将签出
    dev
    (在图表中提交“C”),然后合并
    master
    (提交“A”)你会发现“A”已经出现在
    dev
    分支的历史记录中,因此没有什么可做的。但是,如果在“A”之后在
    master
    上有额外的提交,那将是不同的,但是你的第二个选项也不会是快进的……你是在尝试做基于的事情吗?是的,我想至少是这样的:P New在git和版本控制中,如果您试图遵循该模型,就不应该出现您描述的提交D在master中而不是在develop中的情况。您所有的工作都将进入develop,热修复程序将合并到master和develop中。
    git checkout develop
    git merge master
    git push origin