https://www.emacswiki.org/emacs/UndoTree
Regarding "_", you can set up Emacs to treat _ as word constituent by modifying the syntax table. For example:
(modify-syntax-entry ?_ "w")
https://www.gnu.org/software/emacs/manual/html_node/elisp/Sy...