我在Git中有一个存储库。我做了一个分支,然后对主分支和分支都做了一些更改。
然后,几十次提交之后,我意识到分支的状态比主分支好得多,所以我希望分支“成为”主分支,并忽略对主分支的更改。
我无法合并它,因为我不想将更改保留在master上。我该怎么办?
额外:在本例中,“旧”主控已被推送到另一个存储库,如GitHub。这是如何改变事情的?
我在Git中有一个存储库。我做了一个分支,然后对主分支和分支都做了一些更改。
然后,几十次提交之后,我意识到分支的状态比主分支好得多,所以我希望分支“成为”主分支,并忽略对主分支的更改。
我无法合并它,因为我不想将更改保留在master上。我该怎么办?
额外:在本例中,“旧”主控已被推送到另一个存储库,如GitHub。这是如何改变事情的?
当前回答
对我来说,我希望我的开发分支在领先之后回到主分支。
在开发过程中:
git checkout master
git pull
git checkout develop
git pull
git reset --hard origin/master
git push -f
其他回答
对我来说,我希望我的开发分支在领先之后回到主分支。
在开发过程中:
git checkout master
git pull
git checkout develop
git pull
git reset --hard origin/master
git push -f
我的做事方式如下
#Backup branch
git checkout -b master_backup
git push origin master_backup
git checkout master
#Hard Reset master branch to the last common commit
git reset --hard e8c8597
#Merge
git merge develop
我发现这个简单的方法效果最好。它不会重写历史,分支的所有先前签入都将附加到主节点。没有丢失任何内容,您可以在提交日志中清楚地看到发生了什么。
目标:使“分支”的当前状态成为“主”
在分支上工作,提交并推送更改,以确保本地和远程存储库是最新的:
git checkout master # Set local repository to master
git reset --hard branch # Force working tree and index to branch
git push origin master # Update remote repository
在此之后,您的master将是分支的最后一次提交的确切状态,并且您的master提交日志将显示分支的所有签入。
通过以下方式将分支重命名为主分支:
git branch -M branch_name master
我知道这不是OP想要的,但如果你知道你将来会遇到与OP类似的问题,你可以这样做。
这是你的情况,
您需要一个分支,它具有新的优秀的新中断功能,但目前还没有推出。你有计划在未来推动它。您当前的prod分支(master)运行良好,但很无聊。你可以对它做一些小改动。如果以后需要,您希望保持当前主(prod)分支的安全。
如果这让人感到困惑,请参见下图中的糟糕情况。
*bad situation*
initial master ---> added boring changes ----merge---> you loose boring
\ /
---> (awesome branch) added awesome changes ---
要解决此问题(即停止钻孔损失),请执行以下操作大体上
通过执行git branch boring创建当前主控形状的副本将boring替换为要保留的任何名称现在,您可以向主分支添加新的很棒的功能,并向无聊分支添加无聊的功能。您仍然可以继续更新枯燥的分支,并可能使用它来永远不会将其合并到master。你不会失去乏味的功能。你的主分支将有很棒的功能。
So,
*good situation*
initial master ---> added awesome changes ---> Final master(awesome) branch
\
---> (boring branch) added boring changes ---> Dont merge to master --X-->