Git的问题提交并恢复

时间:2013-09-26 12:35:07

标签: git github

我正在将master分支合并到一个子分支中,以便我可以将最新更新的代码添加到该子分支中。

合并后我意识到我错过了什么,所以我想撤消合并。

我正在使用GitHub for Mac并且当时没有互联网来查找如何正确撤消合并。所以我愚蠢地提交合并希望我可以恢复到我之前的提交。一切似乎都没问题。

但是当我尝试将master合并回子分支时,它没有像我第一次合并时那样拾取所有冲突和更改。我想这是因为我有旧合并的历史。

一旦我恢复了我的Internet连接,我搜索并尝试运行以下命令以恢复到原始合并之前的提交:

git reset --hard HASH

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

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

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如果您的分支机构是从主分支机构中删除的话,那么重新分支分支机构可能会更好。 http://git-scm.com/book/en/Git-Branching-Rebasing

git checkout sub-branch
git rebase master

如果您的子分支上的冲突是由于早期从master进行合并而您想要撤消它,那么您可能希望还原。

git revert SHA-1

答案 1 :(得分:0)

在这种情况下,将resetreflog结合使用可能会产生更好的结果,即最后一次良好提交的位置。这将重写您的工作目录并将历史记录提交到所需的点。

这将需要使用命令行。

  1. 查看已进行的更改(移动HEAD

    git reflog

  2. reflog中识别哪个哈希表示最后一次提交

    提交哈希值或HEAD@{ }值都可用

  3. 将当前分支的HEAD重置为指定的散列,重写工作目录

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

答案 2 :(得分:0)

我解决它的方式是以下......也许它更复杂,因为我使用GitHub for Mac ...

我重置了我想要的最后一个提交哈希:

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

然后我从子分支创建了一个子分支,我遇到了问题。当我再次将master合并到其中时,这就是阻止任何历史回归的原因。

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