撤消一个坏的拉

首先,Git很糟糕。 我知道,我知道,这应该是从切片面包以来最好的,但它很烂。 这就像试图用电锯刮胡子:一个微小的错误,到处都是血与牙齿。 也许,如果我真的可以把一个头,一个参考,一个犯,一个分支,一个干,一个怪物和一个小怪物做一个确切的区分,其中一些可能会容易一些,但对于一个只有十年的普通人来说SVN,Perforce和RCS的经验,它们看起来都像是一个胡思乱想的黑魔法。

现在出于某种原因, git pull从来没有为我工作过。 到目前为止,我收到了一条10行错误消息,与“错误”一样有帮助。 用错误信息search产生了大量的build议,只有共同的事实,他们没有任何明显的影响。 但是,这不是今天的问题:我已经习惯了inputgit pull origin branch

今天,我在两个分支之间,“主人”和“rest室”之间来回转动,当时我在主分支。 我想从远程存储库获取最新的更改到本地,但我打错了。 我没有写git pull origin master ,而是写了git pull origin lounge ,然后git pull origin loungeinput正确的命令。

没有证据表明第一次(不良)的login,只有两次合并:

 commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b Merge: 43fdec5... db09f0d... Author: Malvolio <info@xcompanyx.com> Date: Wed Nov 24 20:38:58 2010 -0500 Merge branch 'master' of github.com:xcompanyx/xRepositoryX commit db09f0d79d744d6a354142041b47ff5d748999f3 Merge: 81b6c3d... fc73e25... Author: Malvolio <info@xcompanyx.com> Date: Wed Nov 24 17:38:16 2010 -0800 Merge branch 'master' of github.com:xcompanyx/xRepositoryX commit 81b6c3d04b7c464f8750a56282635526a5ef83a1 Author: Michael <info@xcompanyx.com> Date: Wed Nov 24 17:38:07 2010 -0800 the last commit I did 

但在rest室分支新创build的文件在我的存储库中。

所以现在我被打了,对吧? 我应该只是给我的仓库打电话,再次克隆遥控器,手动重新申请所有不需要的改动,然后把它logging到Git吮吸,或者有一些咒语,我会背诵,这将使一切更好? 如果我牺牲一只山羊会有帮助吗?

使用git reflog来查看你的HEAD指向之前,你搞砸了。

你应该看到像这样的东西:

 48ab8d HEAD@{0}: pull: Fast-forward a34bda HEAD@{5}: commit: my last commit message 

现在,把你的主分支指向错误之前的提交:

git reset --hard a34bda

完成。 就像它从未发生过。

我不能从你的问题中完全理解你的历史,但是一般来说,如果你进行两次合并(一次合并),删除其中一个是完全简单的。

 - o - o - o - A - M1 - M2 (master) / / - o - o - o / (origin/lounge) / - o - o (origin/master) 

最明显的方法是:

  git checkout master git reset --hard A git merge origin/master 

这使用您的本地caching版本的起源的主,如果你想要合并现在的东西,使用git pull origin master