除了主人之外,我还有一个分支机构的git repo。我想让那个分支成为主人 - 完全覆盖主人。显然我可以进行合并,但这会导致许多冲突,当我知道我总是希望来自附加分支的文件而不是主文件时,解决它们似乎需要做很多工作。
是否可以将分支转换为主分支,或者进行合并并告诉git始终支持来自一个分支的文件而不是另一个分支?
提前致谢!
答案 0 :(得分:24)
您可以使用reset命令一次性执行此操作:
git checkout master
git reset --hard topicBranch
硬重置会使当前分支指向给定的提交。这将丢弃主机上尚未在主题分支上的任何提交;他们不会合并。
同样适用于rebase的警告:如果您已经将master分支推送到与其他开发人员共享的任何存储库,请不要这样做。
答案 1 :(得分:7)
如果您是访问此存储库的唯一开发人员,并且未与其他开发人员共享,则通过创建新分支非常容易。在开始之前,请确保您的存储库是干净的(所有修改都已检入当前分支)。
备份旧的主分支:
git checkout master
git branch oldMaster
删除旧主人并创建新主人:
git checkout topicBranch
git branch -D master
git branch master
如果托管在远程服务器上的存储库中,则需要更新远程服务器:
git push --force remoteName master:master
重要提示:如果其他开发人员从您的存储库中撤出,则此方法会在他们下次从您的存储库中提取或推送到他们的存储库时为他们生成错误。
答案 2 :(得分:0)
我仍然不是git的专家,但看起来你想要rebase命令:
git checkout branch_name
git rebase master
git checkout master
看起来这会将所有更改自动合并到您的主服务器中,当您的分支与主服务器分离时,然后将当前更改重新应用到这些更改的主服务器上(因此您不必合并)。
当然,如果您只想完全覆盖主服务器,我认为如果您使用force选项,您应该能够将该分支推送到主存储库。像这样:
git push --force origin branch_name
然后您的遥控器将在主分支中获得您分支的所有更改,然后您可以将其撤回...
git checkout master
git pull --force origin