git在一次大的重构后重新构建了基础

git在一次大的重构后重新构建了基础,git,git-rebase,Git,Git Rebase,我有两个分支,硕士和博士。在featureA分支中,我在CoolFile.m中编写了一系列新代码。此功能尚未完成,因此此代码尚未准备好合并到主程序中。 CoolFile在过去编写得非常糟糕,因此在开发分支中我对其进行了一系列更改(主要是重新排序方法、添加注释和删除空白) 现在我想从master中重新设置基址,这样我就可以从清理后的代码中获益。问题是,由于所有的方法都在移动,所以rebase试图将所有新代码放在错误的位置。解决这个问题的最好方法是什么?我是否应该等到功能完成重构后再进行重构?我可能

我有两个分支,硕士和博士。在featureA分支中,我在CoolFile.m中编写了一系列新代码。此功能尚未完成,因此此代码尚未准备好合并到主程序中。 CoolFile在过去编写得非常糟糕,因此在开发分支中我对其进行了一系列更改(主要是重新排序方法、添加注释和删除空白)


现在我想从master中重新设置基址,这样我就可以从清理后的代码中获益。问题是,由于所有的方法都在移动,所以rebase试图将所有新代码放在错误的位置。解决这个问题的最好方法是什么?我是否应该等到功能完成重构后再进行重构?

我可能是错的,因为我有点像git新手,但rebase的工作方式是它从源分支(在本例中为master)找到子分支的最新公共祖先,然后应用源分支的新提交,然后应用子分支的新提交,在子分支上(换句话说,就好像您得到了最新的主分支,然后重新创建了分支,一次提交一次提交)。因此,等待对您没有好处,因为它将应用来自两个分支的所有提交

我发现最好的方法就是咬紧牙关,合并。与其他开发人员一起,以便选择要解决合并冲突的代码


我还发现,使提交变小使重定基/合并更容易。所以不要重构x函数,然后提交,每次重构后提交。这实际上是为了找到一个平衡点——不要提交每一行更改,但在有意义的情况下尽可能地减少提交。

您可以将主分支中的更改合并到您的分支中

A--B--F--G--H master
   \
    \-C--D--E featureA
假设您从master上的commit B创建了featureA,并且C、D和E是对featureA进行的提交,而F和G是对方法等进行重新排序的提交。现在要做的是将F和G合并到featureA分支中

$ git checkout featureA
$ git merge G (G is the sha1)
或者,您可以将提交的F和G挑选到featureA中。请记住,您仍然会遇到冲突,这些只是您的重设基础选项的备选方案

将来,我建议您直接在featureA上进行重构,或者从featureA的另一个分支进行重构:

A--B--F--G--H master
   \
    \-C--D--E featureA
         \
          \-I--J--K refactorFeatureA

那么,在重构分支中合并到featureA是小菜一碟,因为合并将是微不足道的。

如果您有一堆这样的小提交,您的历史中不会有一堆不明显的注释吗?比如“move methodA,move methodB,move methodC,等等”@christian,“重构-move methodA”有什么不明显的地方?另外,我刚才说我发现小提交和不断的重定会使过程更容易,而不是任何人都必须这样做。我明白你的意思,我通常会在featureA分支中进行重构,但我在master的另一个功能分支中使用了相同的文件。特性A是一个很大的特性,在特性完成之前,我可能会在master上创建更多的分支。这就是我在master中进行重构的原因。