如何在git中摆脱本地提交?

10
坦白地说,我在git仓库上遇到了困难。我从两台不同的机器(比如在工作和家里)上都在一个项目上工作。还有一个名为origin的远程仓库,我在那里保留了代码的主要副本。
一开始,我克隆了origin master的仓库,并开始了一个新的分支newfeature。每天我完成工作后,我会将我的提交从分支newfeature推送到origin。在家里工作时同样如此。
昨天我在家里完成了新功能的工作,所以我检查了我们的master,然后合并了newfeature分支。一切都进行得很顺利,所以我将我的新master分支推送到了origin,然后删除了本地和远程的newfeature分支。今天早些时候在工作时,我检出了合并了新功能的master。现在当我运行git status时,它显示没有需要提交的内容,但是我本地的master分支领先于origin master38个提交。
我该如何消除任何领先的本地提交,因为我知道origin master具有最新的代码?
2个回答

23

你应该重置你的 master 分支与 origin/master 同步:

git checkout master
git reset --hard origin/master

注意: 硬重置将抛弃您的工作副本中的所有更改,使其与origin/master相同。

如果我没有理解您的问题,或者您有犹豫不决,记住git reflog是您的好朋友。


我执行了 git reset --hard origin/master 命令。不幸的是,我昨天推送到 origin 的更改现在已经消失了。所以看起来它将工作副本重置为 38 次提交之前的主分支。我不得不再次从远程克隆 master 分支。 - Tomasz Błachowicz

4

在您的问题描述中,我觉得有一些错误。

您说您已经从家里推送了一些提交到原始版本。现在您来到工作地点并检出主分支,它显示领先于origin/master?

据我所知,origin/master 应该领先于您的本地主分支。

在这种情况下,您需要做的是:

  1. 确保您正在查看完全更新的存储库版本,这意味着它具有来自远程的所有最新信息

    git fetch

这将从配置的所有远程获取,然后您将能够比较您的主分支与 origin/master 的状态,并查看是否真的存在差异或只是未正确同步

  1. 根据您的工作流描述,我希望您只需执行以下操作即可解决所有问题:

    git checkout master

    git pull

  2. 现在,由于您说 reset --hard 带您回到了您不喜欢的状态 - 您无需再次从远程克隆。只需执行以下操作:

    git reflog show master

然后将您的主分支重置回 reset --hard 前指向的提交

您应该回到起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接