git:您的分支和“来源/主”已经分开了-如何丢弃本地提交?


77

我在git中有以下消息:

# Your branch and 'origin/master' have diverged,
# and have 3 and 8 different commits each, respectively.
#   (use "git pull" to merge the remote branch into yours)

我想丢掉3个本地提交,并在原点/主机上拉8个远程提交。

(合并将太困难了,我宁愿在master更新后再次进行3次本地提交。)

我怎样才能做到这一点?

Answers:


207
git fetch origin
git reset --hard origin/master

19
到目前为止,我所看到的最好的答案。对于使用此功能的任何人,任何未经推送的提交或本地更改都将丢失,仅供参考。
DemitryT 2014年

4
你能做到git reset origin/master--hard使工作目录的更改不会丢失?
Wisbucky

为我工作。这是完美的解决方案。
乌塔姆·帕纳拉

当我将其重新设置为最新的master时,会看到类似的消息,但对于非master分支。在这种情况下,拉动会做什么?我应该拉吗?我希望我的承诺是最新的变化。
Rajeev Ranjan

@RajeevRanjan:Pull将(尝试)合并到您现有的更改中。重置将丢弃它们。
SLaks

29

要在临时分支上保留旧提交,以备不时之需:

git branch temp

然后切换到新的主人

git fetch origin
git reset --hard origin/master

那么在这种情况下,他会分支吗?例如,如果他在“ mydevbranch”中工作,那么分支温度是否会简单地创建mydevbranch的新副本分支?这似乎是一个预防措施,你把它的方式柜面他们没有需要他们在这个副本..
登陆

1
是的,这是一种预防措施。它只是确保在将来需要时不会丢失提交。
jdramer 2014年

凭直觉,我本来以为您需要在执行此操作之前先提交本地代码-这就是问题所在,因为您不希望自己所做的一切都进入上游。我猜你认为自己是本地的,不要推-但是最终它将需要上升...我认为这是不必要的。分支是为变体或其他特征而设计的,但它需要从comitted状态发生吗?也许那就是你在说什么。也许我不必担心上班-我只是以为分支机构从上班的源文件中复制了一份文件(丢失了本地更改)

@landed:是的,您要在创建branch后提交本地更改temp。您可以稍后,如果您想恢复其中一些提交,请选择它们(请参阅参考资料git help cherry-pick)。
Cris Luengo

5

尝试执行此操作以吹走您的本地提交:

git reset --hard HEAD~4

3

作为合并的替代方法,可以使用以下命令将功能分支重新建立到主分支上:

git checkout feature
git rebase master

2

如果硬重置不能满足您的需求,并且您不想进行合并,则可以通过删除本地分支并重新下载原始分支来丢弃本地不需要的更改:

git branch -D <local branch>
git checkout -b <branch name> origin/<branch name>

使用master作为一个例子:

git branch -D master
git checkout -b master origin/master

如果本地分支不同于'origin / <branch>',则不允许删除本地分支。
阿尼班

1

要擦除最新的本地提交,请使用以下命令:

git reset HEAD^

这将使标头返回到提交之前的状态,并允许您git pull从master开始。从远程存储库提取之前,请确保将所有更改保存在其他位置(本地)。

为了能够无冲突地拉扯使用git stash,然后git pull

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.