git checkout - Git,如何将origin / master重置为提交?

我通过此命令将本地主服务器重置为提交:

git reset --hard e3f1e37

当我输入$ git status命令时,终端说:

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

由于我也要重置原点/标题,我结帐到origin / master:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

并通过此命令重置标头:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

然后我尝试添加提交到origin / header我没有成功。

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean

最后,我结账给我当地的主人。

$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

因为,我重置了origin / master的头部我希望本地和原点应该在同一个方向,但正如你所看到的那样,git说我的本地/主人是7个提交后面的origin / master。

我该如何解决这个问题? 我正在寻找的东西是本地/主人的头和同一提交的起源/主人。 下图显示了我的所作所为。 谢谢。

enter image description here

Hesam asked 2019-03-15T16:22:02Z
3个解决方案
445 votes

origin/xxx分支始终指向远程。 您无法检查它们,因为它们不是指向本地存储库的指针(您只检查提交。这就是为什么您将看不到在命令行界面分支标记中写入的名称,只有提交哈希)。

更新遥控器需要做的是强制将本地更改推送到主控:

git checkout master
git reset --hard e3f1e37
git push --force origin master
# Then to prove it (it won't print any diff)
git diff master..origin/master
Simon Boudrias answered 2019-03-15T16:22:22Z
39 votes

这里找到的解决方案帮助我们将master更新为先前已经推送的提交:

git checkout master
git reset --hard e3f1e37
git push --force origin e3f1e37:master

与接受的答案的主要区别在于push命令中的master之前的提交哈希“e3f1e37:”。

jkovacs answered 2019-03-15T16:22:57Z
0 votes

由于我有类似的情况,我想我会分享我的情况以及这些答案如何帮助我(感谢大家)。

因此,每当我想在主分支上保存我的进度时,我决定通过修改我的最后一次提交来本地工作(我知道,我应该扩展,承诺,继续推送,然后合并回主人)。

一个深夜,由于害怕失去我在硬件故障方面的进展或以外的事情,我决定将主人推向原点。 后来我一直在修改我的本地主分支,当我决定再次推动时,我面对不同的主分支,发现我无法修改origin / upstream(duh!),就像我可以在本地开发分支一样。

所以我没有在本地结账主,因为我已经提交了。 师父没变。 我甚至不需要重置 - 硬,我目前的提交没问题。

我只是强迫推送到原点,甚至没有指定我想强制在master上的提交,因为在这种情况下它就是HEAD所处的位置。 检查git diff master..origin/master所以没有任何差异,就是这样。 全部固定。 谢谢! (我知道,我是一个新手,请原谅!)。

因此,如果您已经在本地使用主分支,那么只需:

git push --force origin master
git diff master..origin/master
brokenthorn answered 2019-03-15T16:24:06Z
translate from https://stackoverflow.com:/questions/17667023/git-how-to-reset-origin-master-to-a-commit