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

时间:2011-03-25 09:31:50

标签: git

老实说,我的git存储库遇到了困难。我一直在从两台不同的机器上工作(比如在工作和家里)。还有远程存储库(origin),我保留代码的主副本。

一开始,我克隆了存储库表单origin master并启动了新的分支(newfeature)。每天,当我完成工作中的更改后,我将提交从分支newfeature推送到origin。我在家工作时也一样。

昨天我在家完成了新功能,所以我检查了master,然后合并了newfeature分支。一切都很顺利,所以我将新的master分支推送到origin,然后在本地和远程删除了newfeature分支。今天早些时候在工作中我检查了master现在包含合并的新功能。当我现在运行git status时,它表示没有任何内容可以提交,但我的本地分支master提前origin master提交了38次。

如果我知道origin master有最新的代码,我如何摆脱未来的任何本地提交?

2 个答案:

答案 0 :(得分:19)

您应该在master上重置origin/master分支:

git checkout master
git reset --hard origin/master

警告:硬重置会丢弃工作副本中的所有更改,并使其与origin/master中的更改完全相同。

如果我没有正确回答您的问题,或者您有其他想法,请记住git reflog是您的朋友。

答案 1 :(得分:4)

在我看来,你的问题描述中有一些错误。

你说你有一些提交,你已经从家里推到了原点。现在你开始工作,你检查了主分支,它说它是在原点/主人之前? 据我所知,起源/主人应该领先。

我在这些情况下你需要做的是:

  1. 确保您正在查看最新版本的repo,这意味着它拥有来自远程的所有最新信息

    git fetch

  2. 这将从配置的所有遥控器中获取,然后您将能够比较主分支与origin / master的状态,看看是否存在真正的差异或者是否未正确同步

    1. 在您对工作流程的描述中,我希望您的所有问题都可以通过

      消失

      git checkout master

      git pull

    2. 现在正如你所说,reset --hard将你带到了你不喜欢的状态 - 你不需要再次从远程克隆。就这样做:

      git reflog show master

    3. 然后将主服务器重置为重置之前指向的提交--hard

      你应该在广场上。