Because last week was Thanksgiving. Or something.
Give first showed up in Old Englishas giefan, with the same meaning (as in to give to someone), yet it actually appeared as yiven in Old English’s predecessor Middle English. The change to the hard g was from Norse influence, and probably the fact that yiven and giefan evolved from the Proto Germanicgebanan with a hard G. That word can be traced even further back to the ancient Proto Indo Europeanghabh (take, hold, have or give). This week’s “Can you believe they’re related” reveals that ghabh is also the origin word for habit. Weird? Yes, but habit comes from the classical Latin habitus, meaning demeanor or dress and the past participle of habere, “to have or hold”. The line from ghabh to there is a lot clearer now.
There’s also the alternate meaning of give, as in “give in”. There’s no obvious reason for the disparate meanings, but “give up” showed up in the twelfth century, give out in the fourteenth, and as in “give in” in the seventeenth, so it always seems to have had that meaning to it.
And we can’t forget about forgive. It showed up in Old English as, appropriately enough, forgiefan, which could mean “give or allow” as well as “forgive”, “give up” and “give away in marriage”. I’m kind of glad it’s lost that connotation. Anyway, the giefan part should be obvious by now but I don’t think we’ve ever talked about the prefix for- before (heh). As a prefix, for- can mean away, opposite, or completely. Since the whole for- thing could be a post of its own, let’s just say that forgive means “give completely”. That makes sense for most of the dropped definitions, but the current one was adopted basically as a substitute for pardon. Because for some reason, we needed another word for it.
TL;DR: Give and habit come from the same word from thousands of years ago and forgive was given a new meaning just because.
Tony Jebson’s page on The Origins of Old English