Visual Studio变基v git变基

时间:2019-05-23 12:31:37

标签: git azure-devops visual-studio-2019

我们发现执行git变基而不是Visual Studio(2019,Enterprise)变基时会得到不同的结果。请注意,我们是git的新手

我们有一个名为(例如)SomeFeature的分支,然后我们在该分支上工作的人有自己的分支:

  • SomeFeature_mike
  • SomeFeature_tony

Mike处理SomeFeature_mike,进行更改,发出拉取请求,然后将其工作添加到SomeFeature中,托尼现在想在SomeFeature的基础上改头换面,以便他获得Mike的更改

使用Visual Studio有时会出现合并错误,但是我们不确定为什么。如果相反,我们这样做

git checkout SomeFeature_tony
git rebase origin/SomeFeature

然后它似乎可以工作

怀疑是在重新设置基准并进行同步之后,我们并没有强行推动SomeFeature_tony分支,但这并不能回答核心问题,为什么Visual Studio所做的事情与git不同?

2 个答案:

答案 0 :(得分:0)

在执行“ git merge”之前执行“ git rebase”并不完全等同于直接进行“ git merge”。特别是如果您与快进合并(这将使合并的[master]分支保持整洁:))。

a-b-c-d [master]
  \x-y-z [feature]

直接合并

a-b-c-d--m   [master]
  \x-y-z/    [feature]

变基+合并

1) rebase
    a-b-c-d [master]
           \x-y-z [feature]
2) merge
    a-b-c-d-x-y-z [master & feature]

在“直接合并”和“ rebase +合并”中看到合并约束的方式有些不同(即使最终状态为“应该”相同)。 在一种情况下,您将所有修改从两侧应用到公共点并检查冲突。 在另一种情况下,您将修改增量移动到新位置。

我建议使用最后一种解决方案,因为它可以在合并后进行测试,就像合并后一样。

我建议您阅读https://www.atlassian.com/git/tutorials/comparing-workflows

因此,即使在合并之前对IDE进行了基准调整,也可以获得与cmd行类似的结果。请注意,您的IDE可能设置了很多选项,可能会影响git命令。

答案 1 :(得分:0)

在我看来,我认为Visual Studio的“ rebase”选项和“ git rebase”之间没有区别。但是“ merge”与“ rebase”不同。

当您将SomeFeature_tony合并到SomeFeature时,它将合并SomeFeature分支与您在SomeFeature_tony中的当前提交并形成新的提交,就像下面的图片一样: enter image description here

重新设置基准时,它将在SomeFeature之后进行SomeFeature_tony的提交。就像下面的图片: enter image description here

将一个分支合并到另一个分支时,一个分支中提交的文件更改可能与另一个分支冲突。您可以像在Visual Studio中解析merge conflicts一样来解决它。您也可以执行'git添加”以暂存合并的更改,然后使用“ git rebase --continue”继续进行重新设置。

希望获得帮助,祝您愉快:)