Han-Wen Nienhuys <hanwen@xxxxxxxxx> writes: You claim it is _an interface_ issue but it is not. > With GIT, this is what happens > > [hanwen@haring y]$ git pull ../x > fatal: Needed a single revision > Pulling into a black hole? You asked it to fetch from the neighbour repository and merge it into your current branch which does not exist (I presume that you omitted to describe what you did in directory y/ and I am assuming you did "mkdir y && cd y && git initdb" and nothing else). You are pulling into a black hole. > [hanwen@haring y]$ git fetch ../x >... > [hanwen@haring y]$ git checkout You fetched without telling it in which tracking branch to store what you fetched, and as a result your HEAD is not updated, so your current branch still does not exist. A failure from checking out nothingness is not an interface issue; expectation for it to work is a concept level issue. > [hanwen@haring y]$ git branch master > fatal: Needed a single revision You are not at any commit yet and you try to create a branch? Of course, the "right" (in some sense of the word) thing is to do "git clone x y" in the parent directory, without creating y upfront. If you have an empty y to begin with, then you can do this: $ git fetch ../x :origin $ git reset --hard origin which would mirror a part of what "git clone" would have done for you. It copies from the other repository, stores the tip in your tracking branch called "origin", and make your HEAD to be the same as origin. After these two commands, you would have two branches, origin and master, and you will be on master. You can name 'origin' any way you want. You might want to name it 'x' to make it clear (to yourself) that it is used to track what will happen in the neighboring repository 'x'. Also, you would most likely be fetching and merging from the same ../x from now on, so it might be handy to set up the remotes for it: $ cat >.git/remotes/x <<EOF URL: ../x Pull: master:origin EOF Then subsequent work of yours would be done on 'master' branch (you have only two branches, and origin is a tracking branch so you will never make commits on it, which means the above is a logical consequence), and from time to time you would sync with whoever is working in ../x $ git pull x Here, 'x' is just a shorthand which looks up the URL: and Pull: line through .git/remotes/x. If your .git/remotes/ file was named origin (not x), you could even have written: $ git pull because pull defaults to 'origin' (without any other configuration). >> Let's face it, you could just alias "merge" to "pull", and it >> wouldn't really change ANYTHING. > > I don't want ANYTHING to really change, I just want a sane interface to it. I agree that you do not want to change anything. You just needed a bit of handholding, because you deviated from the cookbook usage, to correct your course. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html