使当前的Git分支成为主分支

我在Git有一个仓库。 我做了一个分支,然后对主人和分支做了一些改变。

然后,数十次提交后,我意识到分支比主分组状态要好得多,所以我希望分支“成为”主,而忽略主分支上的变化。

我无法合并它,因为我不想将更改保留在master上。 我该怎么办?

额外:在这种情况下,'旧'主控已经push送到另一个仓库,比如GitHub。 这是如何改变的?


另外两个答案的问题是,新主人没有老主人作为祖先,所以当你推它时,其他人都会搞砸。 这是你想要做的:

git checkout better_branch
git merge --strategy=ours master    # keep the content of this branch, but record a merge
git checkout master
git merge better_branch             # fast-forward master up to the merge

如果你希望你的历史更清晰一点,我建议在合并提交信息中添加一些信息,以清楚你所做的事情。 将第二行更改为:

git merge --strategy=ours --no-commit master
git commit          # add information to the template merge message

确保所有内容都推送到远程存储库(GitHub):

git checkout master

用“better_branch”覆盖“master”:

git reset --hard better_branch

强制推送到远程存储库:

git push -f origin master

编辑:你没有说你推到公共回购! 这使得世界有所不同。

有两种方式,“肮脏”的方式和“干净”的方式。 假设你的分支被命名为new-master 。 这是干净的方式:

git checkout new-master
git branch -m master old-master
git branch -m new-master master
# And don't do this part.  Just don't.  But if you want to...
# git branch -d --force old-master

这将使配置文件更改为匹配重命名的分支。

你也可以这样做,不会更新配置文件。 这就是上面提到的那种......

mv -i .git/refs/new-master .git/refs/master
git checkout master
链接地址: http://www.djcxy.com/p/1157.html

上一篇: Make the current Git branch a master branch

下一篇: Why can't a function take a type constrained only by a typeclass?