Dan Kegel wrote:
I gather the right command for this is "git reset", so I read the man page. It wants a "commit-ish" as the argument. (Boy, that's helpful.) Looking at that patch, I saw its filename was an md5 sum, so I figured maybe that was the "commit-ish", and tried
$ git reset --soft b32ae7a40c601427fea7cb9f145138221030f869 fatal: Needed a single revision
You can get a "commit-ish" SHA-1 IDs for your tree using "git whatchanged".
A commit is an SHA1 ID of the commit it was based off, the patch committer's name+email, the patch author's name+email, the time of the commit and the root directory of the tree committed.
Since James's tree had him as the committer, and my tree has me as the committer, the SHA1 IDs won't be the same. If I were to pull/merge his tree, then they would be.
$ git reset --soft HEAD~8
And voila, it worked; "git log" now showed the desired change as the latest! (Whew. I thought I was going to drown in man pages for a while there.)
Annoyingly, "make" did nothing after this, but I knew the changes I wanted to revert were all in one DLL, so I just removed that DLL's .o files and ran make again.
"git reset" as used above will only modify the commit history. "git diff" should now show you the diff between the old HEAD and the old HEAD~8.
You can use "git reset --hard" to change the checked out tree too, but it will reset it to the point you specify, and you will lose any changes not committed at that point.
So, to reset your whole tree (commit log and checked out files) to the state it was just after the previous commit, you do:
git reset --hard HEAD^
I feel a bit more comfortable with git now!
Great! It's a bit of a hard slog at first, but as more people get used to GIT, then it should be easier to get help.
You've probably see this already, but incase others haven't the Wine Wiki has a page on GIT here:
http://wiki.winehq.org/GitWine
Mike