2017-03-01 154 views
0

同样,我是Git的新手,所以这可能看起来像一个愚蠢的问题。我有一个拥有7个提交的主分支。我想回到第三次提交,因为我意识到它在那里一切都停止工作。我想我应该检查第三次提交。但是,当我这样做时,我的工作副本成为一个独立的头。我的新提交并不像通常那样在主分支上进行。我怎么能解决这个问题?更改以前的提交SourceTree

回答

1

有几种选择,你在这里:

  1. 如果你已经推你不小心改写遥控器上的历史,你可以这样做:

    $ git reset --hard <commitID-of-third-commit>

并推动东西。

  • 如果你还没有推提交的是,你可以做同样在1,但没有改写历史的远程
  • 记住的麻烦,git reset --hard是破坏性的,会破坏未提交的,以及已经COMMITED变化

  • 如果你不希望重写远程您必须恢复所有的3间提交历史和最后一个,并从那里继续前进。

    $ git revert <commit 4>

    $ git revert <commit 5>

  • +0

    请注意,使用'$ git reset --hard'可能具有**破坏性**,因为您将失去所有未被改动的更改。 – kowsky

    +0

    Thx我会补充一点,我认为这很清楚,但总是说得更好。 – ckruczek

    1

    如果你检出通过$ git checkout <commit id>提交,你结束了一个分离的头,就像你说的。如果你想从这一点继续工作,你必须使用$ git checkout -b <new_branch_name>创建一个新的分支。

    如果要将当前分支重置为较早的提交,可以使用$ git reset,如ckruczeks answer中所述。但请注意,(硬)重置可能具有破坏性,因为您的未修改的更改发生松动,并且您的某些提交不再通过您的分支访问。如果您不完全确定您不再需要这些提交,则可以在拨打$ git reset之前签出备用分支。

    通常不建议硬复位已经推送到远程的分支。其他人可能已经在您即将重设的分支之上工作。