撤消共享历史记录的Git rebase

时间:2014-09-11 09:27:44

标签: git rebase git-rebase

我正在研究一个主题分支,我将其称为“主题”。一位同事将一些更改推送到名为develop的共享分支,我希望将其添加到主题分支中。我想我想要改变,因为推动合并提交似乎很混乱。所以我执行了以下命令:

git checkout develop
git pull
git rebase topic develop
git checkout topic
git merge develop

我执行的git pull拉下了几个变化,包括我想要的那个。我将我的git配置为在相关的情况下下拉时始终重新设置。

只有在我执行了所有命令之后,我才意识到我已经改变了共享历史并搞砸了。我还没推过任何东西。撤消/修复上述内容的最佳方法是什么?尽管我的情况涉及改变共享历史,this会在我的情况下以安全的方式解决问题吗?

1 个答案:

答案 0 :(得分:1)

这就是我要做的事情

git stash # clean index and working copy
git reflog topic # see history of topic ref
git checkout topic # switch to topic branch
git reset --hard topic@{N} # restore topic branch to state previous to merge and rebase (use the number from git reflog instead of N)

git stash # clean index and working copy
git reflog develop
git checkout develop # switch to develop branch
git reset --hard develop@{N} # since index and WC was clean, there is no changes to lost due to --hard

注意:组合rebase和merge时应该极为谨慎,以避免这种情况,如果可能,你应该选择其中之一(或rebase,合并,而不是两者)

一旦你恢复了之前的清洁状态,从一开始就要完成你想做的事情,你可以通过以下方式重新定义开发主题:

git checkout topic # switch to topic branch
git fetch # get last changes from remote repository on "origin/" branches
git stash # clean WC and index
git rebase origin/develop

请记住,如果没有为不同的客户共享主题分支,那么你只能做这个rebase(即主题分支上没有与你的其他存储库合并)