git合并,我一直搞砸了。

时间:2015-04-28 12:36:54

标签: git

我知道这都是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

我回到了我开始的地方。

感谢您阅读

2 个答案:

答案 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