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

我一直在做某件事,然后觉得它完全搞砸了……在犯下一些罪行之后。所以我尝试了下面的顺序:

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

这时我明白了

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

我想放弃我的本地提交,而不必清除我的本地目录和重新下载一切。我怎么才能做到呢?

223871 次浏览
git reset --hard origin/master

将删除所有不在origin/master中的提交,其中origin是repo名称,master是分支的名称。

说句题外话,除了米帕迪的回答(顺便说一句,它应该有用),你应该知道做:

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

我曾经见过远程不同步,需要更新的例子。如果reset --hardbranch -D不能工作,请尝试

git pull origin
git reset --hard

你需要逃离

git fetch

获得所有更改,然后您将不会收到“您的分支领先”的消息。

我必须做一个:

git checkout -b master

就像少年犯说的,它不存在,因为它已经被抹去了

git -D master

我所做的就是努力重置为HEAD。这将清除所有的本地提交:

git reset --hard HEAD^