GIT合并和重设基础工作流确认?

GIT合并和重设基础工作流确认?,git,version-control,Git,Version Control,我已经阅读了一些其他人关于合并与重基、使用什么以及何时使用的问题,但我仍然有一些问题要问一般GIT用户。首先,让我发布我所理解的良好GIT实践: 从现有分支A创建新分支B 在分支B上添加/提交更改 从分支A重新设置更新的基础 将更改从分支B合并到分支A“ 根据我目前所了解的情况,当使用Hierarchical分支模型(即a=主分支,B=实验分支用于处理新功能)时,上述工作流最有效。简言之,重新设置树的基础并合并回主分支是很好的。我的想法正确吗 现在,如果与可能提交/合并更改到(主分支)的其他开发

我已经阅读了一些其他人关于合并与重基、使用什么以及何时使用的问题,但我仍然有一些问题要问一般GIT用户。首先,让我发布我所理解的良好GIT实践:

  • 从现有分支A创建新分支B
  • 在分支B上添加/提交更改
  • 从分支A重新设置更新的基础
  • 将更改从分支B合并到分支A“
  • 根据我目前所了解的情况,当使用Hierarchical分支模型(即a=主分支,B=实验分支用于处理新功能)时,上述工作流最有效。简言之,重新设置树的基础并合并回主分支是很好的。我的想法正确吗

    现在,如果与可能提交/合并更改到(主分支)的其他开发人员合作,我认为我最好尽可能经常重复步骤2和3,以确保我在分支B上的工作不会与其他用户提交给分支A的任何内容冲突。如果存在任何冲突,在分支2上使用rebase将重新应用我的提交,并允许我在合并回分支A之前解决这些冲突。Am我的理解正确吗

    最后,这里是我的主要问题:如果我没有与任何其他开发人员合作,并且在分支B中完成我的新功能之前我没有接触分支A,那么我可以跳过重基吗(步骤3),然后将分支B合并到主分支A中?我想先做一个重基仍然没有什么坏处,但是如果我知道分支A在创建分支B后就没有被碰过,那么就没有必要了。我的理解正确吗

    另外,我想提前感谢你们给我的任何指导!我是GIT新手,在使用GIT之前从未使用过SCM系统

    谢谢,, 杰西莱特
    不,过度使用rebase不是一个好主意。我一开始是这样做的,但除了合并和重置之外什么也没做。看看。它基于


    简言之,你希望你的工作有条理。将分支A作为分支B的基础将它们联系在一起。这可能是一件坏事。如果A中的某件事情不好,那么“撤销”可能不是一件小事“你的理解是正确的。如果没有任何东西触及A,那么您的重新基准将是不可操作的。A不变的好处是您知道不会有冲突

    但是,使用所有合并将创建不必要的提交。如果您在源于主分支的要素分支中工作,则重定基址可以保持历史记录的整洁。但是,如果您要合并到一个发布分支中,那么我同意使用
    merge
    +
    --no ff
    是一个更好的方法,因为您将有一个新的commit to标记。“clean history”被高估了。通过重新重置和合并,可以从要素分支中删除所有中间提交。或者,如果您想通过手动添加sha_1来合并头并提交所有功能,您可以伪造八达通合并。使用log或gitk的set符号以及
    --无合并
    git分支--contains
    来查看您的位置。gitk中漂亮的线条并不是软件开发的最终目标。谢谢你的回复!用主分支的最新代码替换当前分支,然后重新应用分支特定的提交,这不是从本质上重置了当前分支的基础吗?我浏览了你的文章,但这篇GIT文章对我来说太新鲜了,有一半的术语我都看不懂:(不过我会花一些时间重读你的文章。看起来你提出了一些好的观点。也许我也会去看nvie的。你的与nvie的有何不同?一个版本的每个功能都是从同一点开始的。nvie的流程允许分支从点开始,因为其他一些功能已经集成了。这将它们结合起来,我的pProcess没有。我只是通读了nvie的工作流程帖子和您的工作流程。我了解nvie的工作流程,但我对您的工作流程还有一些问题。所谓“发布的每个功能都从同一点开始”,您的意思是开发分支不允许提交(根据nvie的术语)版本发布之间?这意味着所有功能分支基本上都必须从上次发布的版本开始,对吗?