我对Git完全不熟悉。我提交了一些错误的代码然后纠正它,我将当前分支重置为上一个分支。但不知何故,这并没有做我想要的!现在我的主人有一个额外的分支名称previous_master(这是我希望分支指向的地方)。我错误提交的代码有分支名称original / master! 我不知道如何纠正我的错误。我希望主人也有分支名称original / master。
答案 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。这个信息一开始可能有点令人生畏,但找出你想要的信息应该相当容易。实验!