我知道这都是git docs和堆栈溢出,但我似乎还无法弄清楚我做错了什么。
我正在使用git尝试对我的一个提交进行硬恢复。这意味着我想放弃我以后的所有新提交,并重新发布所有文件(86次更改)
来自分公司大师我已经运行
git checkout 6dde2c36b35e6a38b6528d4445b
git checkout -b iwantthesechanges
所以现在我不再处于分离的HEAD状态,我有两个分支;
git branch
返回
master
*iwantthesechanges
所以现在从这里我怎么能用我所有的旧更改覆盖master。
我试过了
git merge master iwantthesechanges
和
git merge iwantthesechanges master
我回到了我开始的地方。
感谢您阅读
答案 0 :(得分:2)
这不是合并工作的方式。 iwantthesechanges
中的所有提交都已在master
中,因此当您尝试将母版合并到iwantthesechanges
时,您将获得"已经及时更新",当你尝试相反的方式时,iwantthesechanges
将与主人一起更新。
你想要
git checkout master
git reset --hard 6dde2c36b35e6a38b6528d4445b # brings master back to 6dde2
git push --force origin master #beware! You will rewrite history!
如果您希望仍然希望丢弃某处的更改,请在master
之前在reset
上创建新分支。
另一个不那么激进的选择是使用git revert
来恢复自6dde2c以来的所有更改(可能是rebase
它们,以便它是一个大提交而不是86个提交对象) ,并推动它。
了解更多:
答案 1 :(得分:1)
将iwantthesechanges
分支合并到master
不会覆盖master
,它只会在master
之上创建新的提交。如果要将master
回滚到6dde2c36b35e6a38b6528d4445b
提交,则可以使用此命令:
git reset --hard 6dde2c36b3
git push -f origin 6dde2c36b3:master
这会将master
重置为先前的提交,然后使用更改覆盖远程master
。