There is always a lot of confusion about this concept, because the naming is misleading, given that both tree and graph searches produce a tree while exploring the search space, which is usually represented as a graph. The other answers are currently incorrect.
Firstly, we have to understand that the underlying problem (or search space) is almost always represented as a graph. So, the difference is not whether the problem is a tree (a special kind of graph), or a general graph!
The distinction is, instead, how we are traversing the search space (represented as a graph) to search for our goal state and whether we are using an additional list (called the closed list) or not.
So, the basic differences are
In the case of a graph search, we use a list, called the closed list (also called explored set), to keep track of the nodes that have already been visited and expanded, so that they are not visited and expanded again.
In the case of a tree search, we do not keep this closed list. Consequently, the same node can be visited multiple (or even infinitely many) times, which means that the produced tree (by the tree search) may contain the same node multiple times.
Advantages and disadvantages
The advantage of graph search obviously is that, if we finish the search of a node, we will never search it again, while we may do so in a tree search. The disadvantage of graph search is that it uses more memory, which we may or may not have.
So, there is a trade-off between space and time when using graph search as opposed to tree search (or vice-versa).
See section 3.3 (page 77) of the book Artificial Intelligence: A Modern Approach (3rd edition) by Stuart J. Russell and Peter Norvig.