Pergunta

I'd been working on something, and decided it was completely screwed...after having committed some of it. So I tried the following sequence:

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

At which point I got the message

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

I want to discard my local commits, without having to wipe out my local directory and redownload everything. How can I accomplish that?

Foi útil?

Solução

git reset --hard origin/master

will remove all commits not in origin/master where origin is the repo name and master is the name of the branch.

Outras dicas

As an aside, apart from the answer by mipadi (which should work by the way), you should know that doing:

git branch -D master
git checkout master

also does exactly what you want without having to redownload everything (your quote paraphrased). That is because your local repo contains a copy of the remote repo (and that copy is not the same as your local directory, it is not even the same as your checked out branch).

Wiping out a branch is perfectly safe and reconstructing that branch is very fast and involves no network traffic. Remember, git is primarily a local repo by design. Even remote branches have a copy on the local. There's only a bit of metadata that tells git that a specific local copy is actually a remote branch. In git, all files are on your hard disk all the time.

If you don't have any branches other than master, you should:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp

What I do is I try to reset hard to HEAD. This will wipe out all the local commits:

git reset --hard HEAD^

You need to run

git fetch

To get all changes and then you will not receive message with "your branch is ahead".

I have seen instances where the remote became out of sync and needed to be updated. If a reset --hard or a branch -D fail to work, try

git pull origin
git reset --hard 

I had to do a :

git checkout -b master

as git said that it doesn't exists, because it's been wipe with the

git -D master
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top