我对 Git 完全陌生。我提交了一些错误的代码,然后为了纠正它,我将当前分支重置为前一个分支。但不知何故,这并没有做我想要的!现在我的主人有一个额外的分支名称previous_master(这是我希望分支指向的地方)。我错误提交的代码具有分支名称 original/master!我不知道如何纠正我的错误。我希望主人也有分支名称 original/master。
2 回答
小基础
首先请记住,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 推送
如果您知道您希望 master 指向的提交的 sha,只需执行以下操作:
$ git checkout master
$ git reset <sha>
如果你执行
$ git reflog
您将获得有关您所做工作的历史记录。左列中的字符串是 shas。这些信息起初可能有点吓人,但应该很容易找出你想要的信息。实验!