0

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

4

2 回答 2

4

小基础

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

分支名称的工作方式类似于标签 - 它们可以轻松组织您的工作树,但它们都只是散列指针。如果需要,您可以使用git checkout <hash id>.

起源/*

看起来像something/something(例如origin/master)的分支是远程分支。因此origin/master,这意味着在“原点”远程分支上的“主”。

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

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

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

所有提交的历史都将保留 - 只需告诉它会将您当前的分支和状态重置为历史中的该哈希值。

如果您想将其发送到 repo 调用:

git push --force origin master
  • 这将明确地将您的主状态反映到源/主(将其发送到源远程)。 不要使用 --force 除非您绝对确定要更改该遥控器上的历史记录,并且如果其他开发人员已经使用已经从 origin/master 拉取,则永远不要使用它,因为这会更改origin/master. 它会做你想做的事,但你应该更详细地阅读它:

    人 git 推送

于 2012-12-04T23:46:22.897 回答
4

如果您知道您希望 master 指向的提交的 sha,只需执行以下操作:

$ git checkout master
$ git reset <sha>

如果你执行

$ git reflog

您将获得有关您所做工作的历史记录。左列中的字符串是 shas。这些信息起初可能有点吓人,但应该很容易找出你想要的信息。实验!

于 2012-12-04T22:58:19.053 回答