On Fri, 17 Jan 2014 05:08:15 -0800 (PST) [email protected] wrote: > I need to check out a revision from a repository, that supports only > git. I don't know much about git, but I am used to svn. > It seems that git first needs s clone before doing anything. And that > clone would be the current version - the wrong one in my case. > After that I do: > git checkout <rev-number> > > I get informed that Head now is pointing the rev-number. I need to > download that revision, and also overwite anything from the current > version, while erasing any extra files or dirs. > > I have tried everything i could find, fetch --all, clean -fd etc., > but I always ene up with the initial, wrong version. > > What should I do?
After you cloned a repository, like with git clone repo_url target_dir The target directory will contain a subdirectory named ".git" holding the Git object and configuration store (that's what constitutes the local repository), and the directory itself is turned into the so-called "work tree" in Git's terms -- by default `git clone` checks out the tip commit of the default branch of the repository it cloned. Ignoring that bit for the moment, to bring the work tree into the state of the revision you need, you do cd target_dir git checkout name_of_revision That "name_of_revision" is a tricky part: it might be the SHA-1 name of a particular commit or the name of a branch (in which case it will mean the tip commit at that branch's history) or the name of a tag (in which case it will mean the commit tag points to). It also might be a special expression but let's pretend it's not your case. Running out `git checkout` *does* remove files and directories from the work tree if and only if they are currently tracked -- that is, present in the commit the work tree's contents is based on. What this means for you? If HEAD includes (tracks) a file "foo" and a directory "bar", they will be in your work tree unless you've deleted them by hand. Should now you check out a commit which does not include the file "foo" and the directory "bar", Git will remove them *unless* you have local modifications in the file "foo" or in one of the files under "bar" which are tracked by HEAD. Let's recap: what you do *should* work; without any `git clean` etc. So either you're doing something wrong or your premises are wrong. Please provide more context for us: what's the name of the revision you need, is it a tag or a branch (can be known by correlating this name with what `git branch -a` and `git tag` output) or the SHA-1 name of a commit. What exactly command do you run for checking out? What's the output of running `git status` afterwards? -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
