Git:重置原始/主分支

时间:2012-12-04 22:40:18

标签: git

我对Git完全不熟悉。我提交了一些错误的代码然后纠正它,我将当前分支重置为上一个分支。但不知何故,这并没有做我想要的!现在我的主人有一个额外的分支名称previous_master(这是我希望分支指向的地方)。我错误提交的代码有分支名称original / master! 我不知道如何纠正我的错误。我希望主人也有分支名称original / master。

2 个答案:

答案 0 :(得分:4)

基础知识

首先请记住,git中的所有内容都是通过哈希标识的。您在历史记录中提交的所有内容都可以通过此哈希值(git checkout $hash来更改应用程序状态,git show $hash以显示该提交中的更改等等)。

分支名称的工作方式类似于标记 - 它们可以轻松组织工作树,但所有这些都只是哈希指针。如果你愿意,你可以及时回到&#34;在分支中使用git checkout <hash id>

<强>起源/ *

看起来像something/something的分支(例如origin/master)是远程分支。因此origin/master表示分支&#34; master&#34;关于&#34;起源&#34;远程

您可以通过以下方式显示当地分支机构:

git branch

和远程:

git branch -r

您可以通过以下方式将master发送到名为origin的远程仓库:

git push origin master

如果推送中两个分支的历史记录之间存在冲突,git将不允许推送它,它将提示您在允许推送之前手动解决冲突。


在您的情况下,您需要找到哪个提交(哪个哈希)是您想要的应用程序状态,然后将您的分支重置为该提交。

您可以通过以下方式在终端中显示您的提交历史记录:

git log --graph --decorate --pretty=oneline --abbrev-commit --all

这看起来很疯狂,但它是我最喜欢的git命令,我把它放在短别名

您可以通过以下方式将应用状态切换为该提交:

git checkout $hash

HEAD 现在处于该哈希状态。

找到您想要的状态,并通过以下方式将您的主人重置为:

git checkout master
git reset --hard $hash

要小心,因为这会删除所有未提交的更改。

所有提交的历史记录都将保留 - 只需告诉它将重置您当前的分支并在历史记录中声明该哈希值。

如果您想将其发送到回电话:

git push --force origin master
  • 这将明确地将您的主要状态反映到origin / master(将其发送到origin remote)。 不要使用--force,除非您完全确定您希望更改该遥控器上的历史记录,如果另一位开发人员已使用已从源/主服务器中提取,则永远不要使用它,因为这会更改{的历史记录{1}}。 它会做你想要的,但你应该更详细地阅读它:

    man git push

答案 1 :(得分:3)

如果您知道要主人指向的提交的sha,只需执行:

$ git checkout master
$ git reset <sha>

如果你执行

$ git reflog

您将了解自己所做的事情。左列中的字符串是shas。这个信息一开始可能有点令人生畏,但找出你想要的信息应该相当容易。实验!