如何用实验分支替换master分支

Nic*_*ilt 5 git

我有两个分支:主人和实验.它们都是分开进化而且现在非常不同.现在我准备让实验分支我的主分支.

如果我试试

git checkout master
git merge experiment
Run Code Online (Sandbox Code Playgroud)

我得到了大量的错误.

在没有失去实验分支的所有历史的情况下,让实验分支成为主人的最简单方法是什么.

我已经创建了一个master分支的备份,就像这样的1.0版

git checkout master
git checkout -b release_1
Run Code Online (Sandbox Code Playgroud)

Mau*_*fer 21

假设这些是私有分支(即没有其他人正在处理它们),您可以设置masterexperiment这样:

git checkout master
git reset --hard experiment
Run Code Online (Sandbox Code Playgroud)

如果这些是公共分支,你可能想要合并和解决冲突,正如Jefromi解释的那样.


Cas*_*bel 12

这里有一些可能性,具体取决于"替换"的含义.你几乎肯定采取正确的方法开始 - 合并通常是要走的路.你看到的"错误"是合并冲突,大概是.如果您确定知道,只要发生冲突,您希望使用实验分支中的版本,您可以:

# resolve conflicts by taking the version from experimental
# non-conflicting content is merged normally
git checkout master
git merge -Xtheirs experimental
Run Code Online (Sandbox Code Playgroud)

如果你想在实验中使用该版本的所有内容,而不仅仅是存在冲突的地方,那么有很多方法(实际上没有合并策略).最简单的:

# do the merge the other way around
git checkout experimental
git merge -s ours master
git checkout master
git merge experimental

# do the merge the right way
git checkout master
git merge --no-commit experimental  # merge, but stop before committing
git checkout experimental .         # check out content, but don't switch branch
git commit                          # commit the merge
Run Code Online (Sandbox Code Playgroud)

其他人建议的方式(reset --hard,branch -M)会起作用,但由于它们不会创建合并提交,因此您的主分支以非快速方式移动,可能会导致其他需要从此repo中获取的人感到头疼.一般来说,只有在未发布这些分支时,我才会说这是正确的答案.

  • @Mauricio:是的,完全同意.我只是非常谨慎 - 特别是知道即使OP的分支是私有的,其他有公共分支的人也可以google并找到这个问题.(当已经有相反的答案时,我更愿意提供另一个答案.) (2认同)