https://github.com/boyw165/history.git
git clone 'git://github.com/boyw165/history.git'
This tool is similar to pop-global-mark but more powerful.
You can go through the whole history without losing them. Actually, pop-global-mark will use the latest record but also discard it. But this tool will preserve all the history and smartly ignore killed buffers or invalid symbol string.
You'll feel the power and convenience of using history-add-history, history-prev-history and history-next-history instead of built-in old way.

(1) - (2) - (3) - (4) - (5)
^ index
(1) - (2) - (3) - (4) - (5)
^ index
(1) - (2) - (3) - (new)
^ index
histories behind index will be discard,
and new one will be appended to the end.
history-mode

(history-add-history) Save current point and buffer as a history into the database.
(history-add-history t) Like above, but also save symbol string at point. When navigating to the history, the tool compare the matched string so that it makes sure the history is VALID.
M-x history-prev-history Goto previous history.
M-x history-next-history Goto new history.
M-x history-kill-histories Discard whole history database.
M-x history-goto-history Enter history preview mode. ENTER to confirm to use the selected history. ESC to cancel preview and restore everything.

history-advised-before-functions and history-advised-after-functions to add history automatically for you.Example:
;; Add history just before `find-tag' executed.
(add-to-list 'history-advised-before-functions 'find-tag-noselect t)
;; Add history just before `find-file' executed.
(add-to-list 'history-advised-before-functions 'find-file-noselect t)
Advise primitive functions might cause infinite loop, strongly suggest you NOT to advise them.
history-history-max The maximum length of the history database.
history-ignore-buffer-names A REGEXP list to ignore specific buffers.
history-window-local-history To toggle using window-local or global history. Window-local history means every window has its independent history database.

history-advised-before-functions and history-advised-after-functions, a functions list to be advised to call history-add-history.
Forks and pull requests are welcome!