如何在Git中用另一个分支替换一个分支而不进行合并

5

我的仓库结构如下。

  • 分支“dev” - 从“master”创建并是当前的。
  • 分支“master” - 最近2年没有提交。但有一些(不需要的)提交领先于“dev”。

现在我需要让“master”代码完全与“dev”相同。我猜,合并将导致在“master”上保留不需要的提交。有什么帮助吗?


请参考以下两个链接:https://dev59.com/s3E85IYBdhLWcg3wQxPG 和 https://dev59.com/PnE85IYBdhLWcg3wejVO (我不会将其作为重复关闭,因为你明确说了“不使用合并”,但这两个链接包含了可能更好的方式,即使用合并,但是一种合并方式表明“另一个分支的末端是正确的”。) - torek
2个回答

6
您可以在当前的dev分支上对master执行硬重置操作:
# from master
git checkout master
git reset --hard dev

但要注意,这可能会丢弃与该分支唯一相关的主分支(commits)。如果您担心这个问题,请考虑从主分支(master)分叉作为一项安全措施。下次推送主分支(master)到远程时,您可能需要使用 force push。
git push --force origin master

强制推送的原因是您已经重写了master分支的基础,Git不会接受普通的推送。

谢谢!不,我并不担心“主”分支的历史记录。 - Toxic Brain

1

Tim的回答非常好,我们只需为记录添加这个变量:

# from any branch
git branch -f master dev

对于关于丢失旧的废弃分支内容的警告也是一样的,备份很便宜,所以也许考虑这个:

git branch backup_old_master master
git branch -f master dev

然后 master 将指向与 dev 目前指向的完全相同的提交(和历史记录),这样你就有了 backup_old_master 以备不时之需。

1
我更喜欢这个答案,因为工作副本不会改变两次。首先,开关可能需要一些时间(在大型存储库中),而且对我来说最重要的是,自动构建器和IDE不会开始做不必要的工作。 - A.H.

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