如何在Git中丢弃本地提交?

时间:2010-10-07 14:20:53

标签: git git-reset

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

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

此时我收到了消息

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

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

6 个答案:

答案 0 :(得分:482)

git reset --hard origin/master

将删除origin/master以外的所有提交,其中origin是回购名称,master是分支的名称。

答案 1 :(得分:27)

顺便说一下,除了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

答案 2 :(得分:11)

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

git reset --hard HEAD^

答案 3 :(得分:3)

你需要运行

git fetch

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

答案 4 :(得分:0)

我见过遥控器不同步且需要更新的情况。如果reset --hardbranch -D无效,请尝试

git pull origin
git reset --hard 

答案 5 :(得分:0)

我必须做一个:

git checkout -b master

因为git说它不存在,因为它已被

擦除
git -D master