如何处理Git断层?

7
假设我们在 Git 代码仓库中,一段时间内都在 master 分支上进行开发。然后,大部分人开始在 coolfeature 分支上工作,而一些开发者继续在 master 上工作。

现在,那些在 master 上工作的开发者失去了兴趣,自从我们创建分支后他们所开发的内容并不重要。但我们想要将主要的开发分支再次称为 master。从概念上讲,我们希望树状结构看起来像这样:
*--master--X      ----master
 \               /
  --coolfeature--

如何最简单地实现这个呢?我们真的不想尝试合并“coolfeature”,而且我们很乐意让标记为X的提交变得完全没有意义。


为了以这种方式有效地管理功能,最好使用允许此操作的工作流程。 每个功能分支是您应该关注的内容。 在Google上搜索“Branch-per-feature”,您应该会找到一篇关于如何管理此类工作流程的详细文章。 - Adam Dymitruk
2个回答

3

使用新的主分支进行强制推送。

git push -f origin master

其他人获取代码,执行重置操作。

git fetch origin master
git reset --hard origin/master

如何将“coolfeature”重命名为“master”? “git branch -d master; git branch -m coolfeature master”? - Steve Bennett
1
它被“重命名”为push操作:在源存储库中指向分支“master”的提交被设置为在执行push的存储库的HEAD中的提交。 - fork0

2
我会这样做而不强制推送:
  1. 为您不关心的提交X创建一个标签。(一分钟后您将会明白原因)
  2. 对自从您分支了coolfeature以来,主分支上的所有提交执行git revert。这会将代码库恢复到您分叉时的状态,但不会重写历史记录,所以如果其他人没有收到通知,他们的代码库也不会受到破坏。
  3. 将coolfeature合并到master分支上。
标记X的目的是标记在您进行所有更改之前的点。标签很便宜,并且某些时候您可能想要知道回滚提交并进行此类更改的时间点。

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