Git,如何重置原点/主提交?

我用这个命令重置了我的本地主节点。

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/header,我签出到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说我的local/master落后于origin/master 7次提交。

我该如何解决这个问题?我要找的东西是本地/主头和原点/主点相同的提交。下图显示了我所做的。谢谢。

enter image description here

339453 次浏览

origin/xxx分支总是指向远程对象的指针。您不能签出它们,因为它们不是指向本地存储库的指针(您只能签出提交。这就是为什么您不会看到在命令行接口分支标记中写入的名称,而只看到提交散列)。

更新远程需要做的是强制将本地更改推到master:

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

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

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

与接受的答案的关键区别是push命令中master之前的提交散列“e3f1e37:”。

因为我也有类似的情况,所以我想分享一下我的情况,以及这些答案是如何帮助我的(谢谢大家)。

所以我决定在本地工作,每次我想要在主分支上保存我的进度时,我都要修改我的最后一次提交(我知道,我应该扩展,提交,继续推进,然后合并回master)。

一天深夜,由于害怕因为硬件故障或其他原因而失去进度,我决定将master推到原点。后来,我一直在修改我的本地主分支,当我决定再次推送时,我面临着不同的主分支,并发现我不能像修改本地开发分支那样修改origin/upstream (咄!)。

我没有在本地签出master,因为我已经提交了。师父没有改变。我甚至不需要重置——很难,我目前的提交是OK的。

我只是强制推到原点,甚至没有指定我想在master上强制提交什么,因为在这种情况下,无论HEAD在哪里。检查了git diff master..origin/master,所以没有任何差异,就是这样。所有的固定。谢谢!(我知道,我是个新手,请原谅!)

所以如果你已经在本地使用了你的主分支,只需:

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

假设你的分支在这里和远程都叫master,而你的远程叫origin,你可以这样做:

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

但是,如果其他人正在使用您的远程存储库并已提取您的更改,则应该避免这样做。在这种情况下,最好恢复您不想要的提交,然后按正常方式进行推送。

以下是我的建议。然而,Simon Boudrias的上述回答也很棒。

检查分支机构

git checkout master

软重置,这意味着这些更改将成为未提交的

git reset --soft HEAD~1

如果不是master,则手动从原点删除分支

修改你的代码,或者堆叠它。

然后,用所发生的事情的描述创建一个新的提交 否则< / p >
git push -f origin master
< p >步骤1。将分支重置为特定的HEAD。 步骤2。

.

.
 git reset --hard e3f1e37 /   git reset --hard origin/master
git push --force origin "Branch name"

完成了。现在用reset to previous commit检查远程分支