什么是“git reset --hard origin”实际上做了什么?

时间:2013-04-18 20:28:45

标签: git

一位朋友做了一个" git reset - hard origin"然后推动了他的改变。他这样做而不是去#g;重置--hard origin / branch_name"这是他实际想要的。

我认为所有" git reset - hard origin"的做法是重置您的分支以完全匹配所有相关的远程分支。然而,在他的推动后,我做了一个" git pull origin branch_name"而对于我来说,一些不明原因,拉出了一堆似乎来自大师的新文件(如果有来自大师的合并);但是在本地和远程日志中,我们从未看到这些文件被提交或者从主服务器到我们的分支机构的任何合并,我们只知道问题发生在推送之后并且不知道实际发生了什么。

2 个答案:

答案 0 :(得分:2)

似乎将当前分支重置为origin默认(即通常为主)分支的状态。

答案 1 :(得分:0)

这是一个有趣的问题...... gitrevisions manual page正式涵盖了这个问题(<refname>案例,第5点)但没有说明如果<refname>被解决了,究竟会发生什么方式。

我试图做git rev-parse origin,Git告诉我这个版本是不明确的(即找不到),我在我用于测试的回购中有refs/remotes/origin

在启用了命令执行跟踪(环境中为git reset --hard origin)的同一个repo中尝试GIT_TRACE=1,解决了git rev-parse的同一个失败。

因此我对此的看法是你的同事(据说是错误的)有一个真正的本地分支或一个名为“origin”的标签,所以git reset --hard origin实际上将他们当前签出的分支重置为该本地的提示分支“起源”。

我现在通过在他们的回购中运行git branch -agit tag来检查这个假设。