Subject: Re: several quick questions

From: Andreas Ericsson <[email-masked]>
Date: Tue, 14 Feb 2006 18:03:07 +0100

Nicolas Vilz 'niv' wrote:
> Hello everyone,
> 
> i wonder, how i revoke a straight forward merge of two trees... I
> actually wanted to be look like somewhere in the git-repository, where
> some branches are merged back with the master tree, but i think, that
> wasn't "cg-merge -c <tree to merge with the actual one>"...
> 
> my result was that my master tree has now the same sha1-sum as my
> development-tree and gitk visualisation differs from that what i saw in
> the git-repository. (Several Arrows headed into back into one line...)
> 
> maybe that was because i didn't do anything in my master tree in the
> meantime.
> 

Correct. The "several arrows" thing is when a merge happens (i.e. two 
simultaneous lines of development crash into one another with 
surprisingly pleasant results most of the time). When you do

$ git checkout -b topic-branch
# work, work, work
$ git checkout master
$ git pull . topic-branch

git will recognize the merge-base as being the current HEAD and simply 
sets HEAD to point to that of topic-branch. This is why it's called a 
fast-forward, since no heavy computing needs to be done to combine the 
two development tracks.

> And another thing, is there no posibility to get back to some commits or
> tags? I realized you can rebranch tags... what, if i want to switch back
> to git version 1.1.6 in the git repository? Or a certain commit?
> 

git reset is your friend.

$ git reset --hard v1.1.6
$ git reset --hard ORIG_HEAD

should do something along the lines of what you want.

> do you have to make a new private branch out of the tag 1.1.6?
> 

No, you don't, but you can if you wish. It's nifty if you want to fork 
the development from a particular branch. In your case, if you really, 
really *want* the arrows pointing to one line, you can do

$ git branch topic-branch HEAD^
# work, work, work
$ git checkout master
$ git pull . topic-branch

That would create one pretty arrow. When multiple tracks of development 
(rather than just two) are combined into one it's called an octopus 
merge. Unless you really know what you're doing, you should try to avoid 
those for small projects, and doing it just for the pretty arrows is.... 
well, let's call it "interesting from the behaviour science scholars 
point of view".

> i used svn and there i could go back some revisions. I haven't found
> such a feature in git, yet... but i think i am blind all the time.
> 

Most likely. I believe at least the reset command is mentioned in the 
tutorial. I trust you've read it before asking, so something is amiss 
either with your eyesight or the tutorial.

> I like git very much and every new day I like it more.
> 

It's a Good Thing. ;)

-- 
Andreas Ericsson                   [email-masked]
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231