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

时间:2013-07-16 02:26:11

标签: git git-checkout git-reset

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

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的头部我希望local和origin应该在同一个方向,但正如你所看到的那样,git说我的本地/ master在7次提交后是origin / master之后。

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

enter image description here

4 个答案:

答案 0 :(得分:474)

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

答案 1 :(得分:44)

找到的解决方案here帮助我们将master更新为之前已被推送的提交:

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

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

答案 2 :(得分:1)

由于我遇到过类似的情况,所以我想分享一下我的情况以及这些答案如何帮助我(谢谢大家)。

因此,我决定每次想保存自己在主分支上的进度时,都要修改上一次提交(在本地工作)(我知道,我应该分支出来,在上面提交,继续推送,然后再合并回master)

一个深夜,由于担心会失去硬件故障或以太坊出问题而产生的偏执狂,我决定将master推向原点。后来我不断修改本地的master分支,当我决定是时候再次推送时,我遇到了不同的master分支,发现我无法像我一样修改源/上游( duh!)地方发展部门。

所以我没有在本地结帐master,因为我已经在提交之后。主人没有改变。我什至不需要重置-辛苦,我当前的提交就可以了。

我只是强制推向原点,甚至没有指定我要向master强制的提交,因为在这种情况下,这就是HEAD所在的位置。选中git diff master..origin/master,就没有任何区别,仅此而已。全部固定。谢谢! (我知道,我是git新手,请原谅!)。

因此,如果您已经可以在本地使用master分支,只需:

git push --force origin master
git diff master..origin/master

答案 3 :(得分:0)

假设您的分支在此处和远程都被称为master,并且您的远程被称为origin,则可以执行以下操作:

git reset --hard <commit-hash>
git push -f origin master

但是,如果其他人正在使用远程存储库并撤消了更改,则应避免这样做。在这种情况下,最好还原不需要的提交,然后按正常方式推送。