Understanding Adjointness of Sheaves in Algebraic Geometry Pushforward and pullback are very basic operations in algebraic geometry, as is the adjointness between them. I worked out a very careful of adjointness of sheaves (below) when I was working out of Hartshorne - however, I still find this theorem somewhat mysterious.
$\textbf{Question:}$ While I am comfortable with using this fairly abstract yet basic theorem, I feel like I should understand it a little better. How do you understand adjointness of sheaves? Is it clearly true if we make some (weak?) additional conditions? Is there a way to think about it to make it more transparent, more believable or even obvious? Please feel very free to work in the case of complex algebraic geometry, etc.
I tried to give a shorter, heuristic proof of adjointness using the etale space of a sheaf - but I got lost checking details. I would be very grateful if someone more knowledgeable could tell me if such a proof exists.


$\textbf{Thm}$  Let $(X, \mathcal{O}_X) \xrightarrow{f} (Y, \mathcal{O}_Y)$ be a morphism of ringed spaces and $\mathcal{F}, \mathcal{G}$ be sheaves of $\mathcal{O}_X, \mathcal{O}_Y$ modules respectively. Then, we have a canonical bijection of sets $$ \textrm{Hom}_{\mathcal{O}_X} (f^*\mathcal{G}, F) = \textrm{Hom}_{\mathcal{O}_Y} (\mathcal{G}, f_*\mathcal{F})$$


Your comments and answers will be very appreciated!
 A: If you're just looking for some intuition, think about what each side is specifying fiber-by-fiber (think about the locally-free case, i.e. vector bundles, if this helps).
The fiber of $f^\ast\mathcal{G}$ at $x\in X$ is the fiber of $\mathcal{G}$ at $f(x)$, and the fiber of $f_*\mathcal{F}$ at $y\in Y$ consists of the sections of the restriction of $\mathcal{F}$ to the pre-image $f^{-1}(y)$.
Now think about what each side of the adjunction formula specifies point-by-point.  The left side at $x\in X$ gives a linear map from $\mathcal{G}(f(x))$ to $\mathcal{F}(x)$.  Now varying $x$ in the pre-image of $y\in Y$, this just amounts to a map $$\mathcal{G}(y)\to \mathcal{F}|_{f^{-1}(y)}(f^{-1}(y)),$$ which is what the right side gives at $y\in Y$.
A: You have sheaves on $X$ and you have sheaves on $Y$. The morphism $f:X\to Y$ gives you a way to transport them back and forth. If you have a morphism
$$
\phi: \mathscr A\to\mathscr B
$$
of sheaves on $X$, then you get a morphism
$$
f_*\phi: f_*\mathscr A\to f_*\mathscr B
$$
of sheaves on $Y$. In the case $\mathscr A=f^*\mathscr A'$, then this combined with the natural map $\mathscr A'\to f_*f^*\mathscr A'$  Donu already mentioned gives you a morphism 
$$
\mathscr A'\to f_*\mathscr B.
$$
Similarly, if you have a morphism
$$
\psi: \mathscr A'\to\mathscr B'
$$
of sheaves on $Y$, then you get a morphism
$$
f^*\psi: f^*\mathscr A'\to f^*\mathscr B'
$$
of sheaves on $X$.
In the case $\mathscr B'=f_*\mathscr B$, then this combined with the other natural map $f^*f_*\mathscr B\to \mathscr B$  Donu already mentioned gives you a morphism 
$$
f^*\mathscr A'\to \mathscr B.
$$
Adjointness says that these two operations are inverses of each other. Now you "only" have to understand those maps Donu mentioned. See his answer for how to start with that.
A: You can think about this as about a generalization of the adjunction between the extension and the restriction of scalars --- if $A \to B$ is a morphism of rings, $M$ is an $A$-module and $N$ is a $B$-module then
$$
Hom_B(M\otimes_A B,N) = Hom_A(M,Res_A N),
$$
where $Res$ is the restriction of scalars. This adjunction coincides with the one tou are interested in in case of affine $X$ and $Y$.
A: I have to admit this puzzled me as well when I first saw it. You can get more insight if you focus on the adjunction maps $f^\ast f_*\mathcal{F}\to \mathcal{F}$ and
$\mathcal{G}\to f_*f^\ast \mathcal{G}$. These often do have geometric meaning. Let's look at some limiting cases. When $f$ is projection to a point with structure sheaf given by a ring $R$.
The first map is simply the evaluation map
$$\Gamma(\mathcal{F})\otimes_R \mathcal{O}_X\to \mathcal{F}$$
which  sends the tensor product of a global section $f$ of $\mathcal{F}$ with $r\in \mathcal{O}_X(U)$ to $rf|_U$, for $U\subset X$. Now consider the opposite situation of the inclusion of a point $x\to Y$. The second map sends a section of $\mathcal{G}$ to its germ at $x$.
Does this help?
A: I used pullbacks and pushouts, or pushforwards,  for years (decades!) before realising the nice context in terms of fibrations and cofibrations of categories, and so this context got written up in the paper "Algebraic colimit calculations in homotopy theory using fibred and cofibred categories", with general matter   based on notes of Thomas Streicher, and so Benabou, but with a few new simple results. 
Thus I find it helpful to see the adjointness result you give as Thm and ask about as a special case of a standard and more general result,  when you have, in essence, pullbacks and pushouts, see Proposition 3.6 of our paper. This should illustrate the principle that  a more general result may be easier to prove, because one is not confused by the special situation. I have not checked this in your case and would like to hear if it is so! 
A: If $f$ is an isomorphism, this is trivial. If the map holds for $f_1: X_1 \to Y$ and $f_2 : X_2 \to Y$, then it holds for the disjoint union $f: X_1 \cup X_2 \to Y$, defined the obvious way. 
$Hom(f^*  G, F)$
$ = Hom (f_1^* G, F_1) \times Hom (f_2^* G, F_2)$
$=Hom ( G, f_{1*} F_1) \times  Hom (G, f_{2*} F_2)$
$= Hom (G, f_{1*}F \times f_{2*} F)$
$ = Hom (G, f_* F)$
This works just as well for infinite unions, with the products replaced by infinite products.
Similarly, it works just as well for non-disjoint unions, with the products replaced by fibered products.
One could proceed to check it for some very simple case, like a map of open balls, and use this argument to extend to the general case. You could even use some of the cases mentioned in the previous answers. But for some reason I think that's almost irrelevant in terms of the intuition behind adjunction. The self-consistency is what matters.
