代码之家  ›  专栏  ›  技术社区  ›  Michael Lorton

松开坏拉

git
  •  46
  • Michael Lorton  · 技术社区  · 14 年前

    首先,Git很烂。我知道,我知道,这应该是自切片面包以来最好的东西,但它很烂。就像用电锯刮胡子:一个小小的错误,到处都是血和牙齿。也许,如果我真的能把一个头,一个裁判,一个委托人,一根树枝,一根茎,一个怪物,和一个惠斯浦区别开来的话,其中一些可能会容易一些,但对于一个只有10年SVN,Perforce,和RCS经验的普通凡人来说,这一切看起来都是相当古怪的黑色魔法。

    出于某种原因, git pull 从来没有为我工作过。我收到一条10行的错误消息,到目前为止,它和“error”这个词一样有用。在谷歌上搜索错误信息产生了大量的建议,这些建议的共同点是它们没有任何明显的影响。但这不是今天的问题:我已经习惯了打字 git pull origin branch .

    今天,我在“主人”和“休息室”两个分支之间来回翻动,这时我在主人的分支中。我想获取从远程存储库到本地存储库的最新更改,但输入错误。而不是写作 git pull origin master ,我写道 git pull origin lounge 然后,不假思索地输入正确的命令。

    没有第一个(坏的)拉入日志的证据,只有两个来自主节点的合并:

    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
    

    但是在休息室分支中新创建的文件在我的存储库中。

    所以现在我被吓坏了,对吧?我应该只是点燃我的存储库,再次克隆遥控器,手动重新应用所有未按下的更改,并将其记为Git sucking,还是有一些咒语,我可以背诵,使它更好?如果我献出一只山羊,会有帮助吗?

    2 回复  |  直到 11 年前
        1
  •  40
  •   jtdubs    14 年前

    使用 git reflog 在你搞砸之前看看你的头是指什么的。

    你应该看到这样的东西:

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

    现在,将您的主分支指向错误拉动之前的提交:

    git reset --hard a34bda

    完成。好像从来没发生过一样。

        2
  •  6
  •   Cascabel    14 年前

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

    - 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
    

    这将使用本地缓存的origin's master版本,如果要合并现有的任何内容,请使用 git pull origin master .