我在git存储库中有一个非常过时的master
分支。
我的所有工作都在另一个分支完成。
合并两者的最佳方法是什么?
我不关心master
中的任何事情,这已经过时了。
答案 0 :(得分:9)
如果您没有丢失主分支的历史记录,只需让master
指向当前分支的头部(您不要“覆盖”master
- 分支 - 本身):
git checkout yourotherbranch
git branch -D master
git checkout -b master
当然,如果您有远程克隆,那么您必须
git push -f origin master
Nota bene :此具体适用于替换整个master
分支并将标题建议的旧master
扔掉。
否则,您应该使用git merge master --strategy=ours
。
答案 1 :(得分:6)
让我们假设您的工作位于名为dev
的分支中:
git checkout dev
git merge --strategy=ours master
git checkout master
git merge dev
合并选项--strategy=ours
旨在用于取代分支的旧开发历史记录(quote)。
答案 2 :(得分:1)
完全覆盖不会合并其他内容,而是放弃它。
git checkout -B master anotherbranch
这比删除并重新创建保留分支设置和reflog更有优势。
如果您的历史记录中有一些管理要求要保留毫无价值的提交,请使用git merge -s ours master@{1}
进行操作。我更喜欢这个序列,因为它会生成一个不寻常的合并消息,它会提醒扫描--oneline
日志合并异常。
答案 3 :(得分:1)
使用git merge strategy=ours
解决方案可以回答很多这些问题,但是我认为它没有解决问题的重点。我将问题解释为“我没有遵循良好的实践,并且基本上主人没有用,而我也不想从主人那里得到任何东西”。在个人项目中很常见。
git push -f origin branch_ive_been_working_for_months:master
用您的远程分支完全替换您的远程主服务器。那么,只需在本地签出master后git pull origin master
,便可以直接回答问题IMO。