Get Terrain location at raycast point

I’ve been stuck on this for an hours now, and i’m either simply not understanding what i can find online, or most things i find on google are no longer valid with unity 5.4.

I’m trying to add a shovel to my game. Currently, i use a short distance raycast to see if it hits the terrain. The idea is, if it hits the terrain, then deform the terrain around the point it hit.
My problem is i have no idea how to get the terrain point instead of the world location.

Any help would be appreciated.
Also, since changes made in runtime to the heightmap are permanent, does anyone have good ideas to reset the terrain after? I tried unsuccessfully to create a copy of the terrain to be modified, but well that never happened. As of now, i have to reimport the original heightmap if i want to reset it.

Here’s a link to getting world coords in terrain coords:

Here’s a link to a question about doing what you want to do: Modifying terrain height under a gameobject at runtime - Unity Answers
The “best answer” has some code garbled by copy paste but should give you an idea. There’s a comment to that answer by npruehs on how to restore terrain heights after your game is over.