一些git使用问题

时间:2010-12-02 16:26:21

标签: git

  1. 说我创建了一个分支,然后合并到master中,然后意识到出错了。在合并之前如何恢复原状?

  2. 说我创建了一个分支,处理它,然后去合并并获得分配冲突。说我现在不想处理它并让新分支成为主人,我该怎么做?

  3. 顺便说一句,你在网上看到的最好的教程是什么?现实生活GIT使用模式?

4 个答案:

答案 0 :(得分:1)

  1. 如果您合并但不想进行提交,则正确的命令是

    git reset --hard HEAD@{1}
    

    这意味着将分支重置为之前的位置(阅读{}语法 - 您可以通过阅读git reflog获得大部分信息。 HEAD^1也可以正常工作,但您必须知道您正在指定当前提交的第一个父级。

    如果您已经推送此提交,请小心通知所有人。如果您无法在共享存储库中传达未来的分支强制更新,请不要这样做。

  2. 执行此操作的正确方法是再次合并,但这次是从新分支执行,并指定您只想要您的一方。 “他们的”战略已被弃用。

    git merge -s ours master
    

    然后将master更新到其他分支所在的位置:

    git checkout master
    git merge --ff-only otherbranch
    

    或者,相反,因为您知道这将是一个快进合并(上面只是一个安全检查),您只需将主服务器更新为当前提交而不检查它:

    git update-ref refs/heads/master HEAD
    

    您可以继续在您的分支机构工作。如果您打算使用master,请使用之前的命令。

  3. 以下是我发现有用的一些链接:

    gitready.com Commuinity Git Book Pro Git Book my article

    其他来源:

    IRC channel on freenode Twitter Search waterfall

    您也可以使用相同的ID在Twitter上找到我。

答案 1 :(得分:0)

  1. 如果没有推送,请检查主服务器,然后使用git reset --hard和最后一次提交的名称。或者,使用reflog:HEAD@{1}将带您回到之前的位置。如果已推送,请使用git-revert创建一个包含更正的新提交。
  2. 查看主人,然后使用git reset --hard mybranch。这使得master指向与mybranch相同的提交,实质上是因为分支分歧而抛弃了master上的所有工作。再说一遍,如果把关于大师的工作公之于众,那就扔掉它是个坏主意。
  3. 请参阅Git Development Strategy for Small Team

答案 2 :(得分:0)

  1. 说我创建了一个分支,然后合并到master中,然后意识到出错了。在合并之前如何恢复原状?

    1. 如果你没有推到主线上,或者已经推测并且绝对知道没有其他人从主线上撤下那么做:

      git reset --hard HEAD~N(N是您想要返回的提交数量。)

    2. 如果你已经推或者不能确定没有其他人没有拉过那么你自己犯了错误就行了:

      git revert

  2. 说我创建了一个分支,处理它,然后去合并并获得分配冲突。假设我现在不想处理它并使新分支成为主人,我该怎么做?

    git checkout <desired branch>
    
    
    git branch -d master
    
    
    git branch -m <desired branch> master
    
  3. 顺便说一下,你在网上看过的最好的教程是什么?现实生活GIT使用模式是什么?

    http://nvie.com/posts/a-successful-git-branching-model/

答案 3 :(得分:-1)

  1. http://www.kernel.org/pub/software/scm/git/docs/git-revert.html
  2. 合并git reset --hard就足够了,对于变基,你必须git rebase --abort