2013-09-26 64 views
2

我正在合并master分支到一个子分支,以便我可以将最新的代码更新到子分支中。Git发出提交并还原

合并后,我意识到我错过了一些东西,所以我想撤消合并。

我使用的是GitHub for Mac,当时没有网络查找如何正确撤消合并。所以我愚蠢地做了合并,希望我能恢复到之前的提交。一切似乎都好。

但是,当我试图合并master回到子分支,它没有拿起所有的冲突和变化,就像我第一次合并时。我认为这是因为我有那里旧合并的历史。

一旦我得到了我的Internet连接后,我寻找,我试图运行以下命令恢复到提交前的原始合并:

git reset --hard HASH 

这似乎工作。然后我再次尝试合并master分支,但它仍然没有采取冲突和变化。当我运行上述命令时,它仍然显示我认为会被删除的提交。

如何在第一次合并之前的提交后永久删除所有内容?我错过了什么吗?

非常感谢您的帮助。

+0

'git log'为分支显示了什么? – asm

+1

如果将'master'合并到分支中显示提交,则在重置分支之后,它听起来像是在重置之前将其合并到主设备中。 – Christopher

回答

0

我解决它下面的方式...也许这是一个ltitle更为复杂,因为我用的GitHub的Mac ...

我重置最后提交的哈希值,我想:

git reset --hard <identified-commit-hash> 

我然后创建从支行支行我遇到了问题。当我再次合并master时,这阻止了任何历史回归。

正如我所说这可能是因为Mac的GitHub无法正常工作,但它对我有用。

1

如果你的分支是从主分割出来的,那么分支分支可能会更好。 http://git-scm.com/book/en/Git-Branching-Rebasing

git checkout sub-branch 
git rebase master 

如果您支行冲突是由于从主先前的合并,并要撤消,那么你想恢复。

git revert SHA-1 
0

在这样的情况下,结合使用resetreflog可能会产生更好的结果到了上次的好承诺也没留下。这将重新编写您的工作目录并将历史记录提交到所需的点。

这将需要使用命令行。

  1. 评论什么样的变化已作出(的HEAD移动)

    git reflog

  2. 确定在reflog其哈希代表上次的好提交

    的提交哈希或[email protected]{ }值都可用

  3. 重置当前分支的头部指定的哈希,重写工作目录

    git reset --hard <identified-commit-hash>