git - 我该如何切换两个分支的内容?

3
我有一个带有开源iOS框架的存储库。当前有两个分支:masterdevelopmaster 包含目前已经过时的框架版本。而 develop 则包含新版本,可以进行“发布”。
现在,我想将 develop 中的新版本作为官方版本,因此我想将其移动到 master。通常,我会使用从 develop 合并到 master 的简单合并。然而,在 developmaster 之间有相当多的 API 更改,因此我得到了相当多的合并冲突。
在深入处理这些冲突之前,我想知道是否有更好的方法来切换 masterdevelop。这两个版本差别很大,所以我不关心正确地移动更改。向后兼容性不是真正的问题,只要能够切换就行。
我知道 git branch -m <old> <new>:我可以将master重命名为v1.4,将develop重命名为master(并从新的master创建一个新的develop),但我不确定这是否是正确的方法。在本地可以正常工作,但我不知道将其推送到 Github 后会对下游用户产生什么影响。
因此,git branch -m 可以吗?还是应该接受合并?或者有其他方法吗?

现在我想起来了,我可以使用develop版本合并和解决所有合并冲突,然后希望git会处理剩下的部分,是这样吗? - Inferis
2个回答

1

是的,你在技术上可以使用 git resetgit branch -m 命令将分支设置到任何提交记录,但我认为你应该首先考虑你的分支的含义

根据你所描述的情况,你有不同版本的软件。一个旧版本,目前由你的 master 分支跟踪,和一个新版本,目前由你的 develop 分支跟踪。

如果有人知道你的旧版本并想要在其上工作,那么他将会检出你的 master 分支,并期望它包含旧版本。如果你现在只是将你的 master 分支设置为 develop 分支(无论是合并还是重置),那么这将会让任何期望获取旧版本的人感到非常困惑。

如果你曾经考虑过将分支指针移动到完全不同的提交记录,那通常意味着你没有良好的分支概念。也许你应该将你的 master 分支命名为 current-stable 之类的名称。然后,当有新的稳定版本可用时,将其重置为新的提交记录将是有意义的。

但这一切取决于您的开发方式。也许最好有一个开发分支,一个稳定版本分支和一个当前稳定分支,预计会在新版本准备就绪时跳转。


1

您可以将它们重命名,或者您可以更新每个分支以包含另一个的内容。这两种操作之间唯一的区别在于reflog会发生什么。假设您不关心,那么是的,您可以将一个重命名为另一个。或者您可以使用git reset更改已检出的分支,或者使用git update-ref,它基本上是git branch -m下面的机制。

最简单的方法可能是使用git branch -m


这对下游用户没有问题吗?一旦我推送了我的更改,拉取“master”的人会得到新的“master”吗? - Inferis
@Inferis:是的,尽管除非新值是旧值的子孙,否则他们将遇到快进问题,除非他们获取并重置其分支。 - Lily Ballard
是的,那就是我想要避免的。 - Inferis
最终我手动执行了合并操作(比之前想象的要容易得多)。重命名分支会导致下游用户出现麻烦的行为。 - Inferis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接