308

我一直在做一些事情,并决定它完全被搞砸了……在做了一些事情之后。所以我尝试了以下顺序:

git reset --hard
git rebase origin
git fetch
git pull
git checkout

在这一点上我得到了消息

Your branch is ahead of 'origin/master' by 2 commits.

我想丢弃我的本地提交,而不必清除我的本地目录并重新下载所有内容。我怎样才能做到这一点?

4

6 回答 6

680
git reset --hard origin/master

将删除所有不在仓库名称和分支名称中的提交origin/masteroriginmaster

于 2010-10-07T14:30:07.893 回答
39

顺便说一句,除了 mipadi 的答案(顺便说一句应该可以),你应该知道这样做:

git branch -D master
git checkout master

也可以完全按照您的意愿行事having to redownload everything(您的报价已转述)。那是因为您的本地仓库包含远程仓库的副本(并且该副本与您的本地目录不同,甚至与您签出的分支不同)。

清除一个分支是非常安全的,并且重建该分支非常快并且不涉及网络流量。请记住,git 在设计上主要是一个本地存储库。即使是远程分支在本地也有一个副本。只有一点元数据告诉 git 一个特定的本地副本实际上是一个远程分支。在 git 中,所有文件一直都在你的硬盘上。

如果你没有除 master 以外的任何分支,你应该:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
于 2010-10-07T14:42:32.423 回答
19

我所做的是我尝试重新设置为 HEAD。这将清除所有本地提交:

git reset --hard HEAD^
于 2017-12-12T09:54:56.980 回答
3

你需要跑

git fetch

要获得所有更改,然后您将不会收到“您的分支在前面”的消息。

于 2013-08-07T08:24:14.867 回答
1

我见过遥控器不同步并需要更新的情况。如果 areset --hard或 abranch -D失败,请尝试

git pull origin
git reset --hard 
于 2013-04-02T20:18:07.070 回答
0

我不得不做一个:

git checkout -b master

正如 git 所说,它不存在,因为它已被

git -D master
于 2014-03-05T12:00:51.143 回答