Bash script for tagging the current git workspace including uncommitted changes
With the input of @EtanReisner, I found a possible way to the solution:

That's our current situation:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD &lt;file&gt;..." to unstage)

    new file:   c
    new file:   e

Changes not staged for commit:
  (use "git add/rm &lt;file&gt;..." to update what will be committed)
  (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)

    deleted:    c
    modified:   e

Untracked files:
  (use "git add &lt;file&gt;..." to include in what will be committed)

    d


I try now to stash all this:

$ git stash --all


Now we can get the hash of it:

$ git rev-parse refs/stash
9a208ed215032b4e47cb1493fc5f16a4a5ea78c1


Or tag it directly (this works)

$ git tag tagged-workspace-01 refs/stash


Now I unstage everything

$ git stash pop --index


This worked quite well:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD &lt;file&gt;..." to unstage)

    new file:   c
    new file:   e

Changes not staged for commit:
  (use "git add &lt;file&gt;..." to update what will be committed)
  (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)

    modified:   e

Untracked files:
  (use "git add &lt;file&gt;..." to include in what will be committed)

    d


As you can see, under some (very unusual) conditions it happens that the revert is not 100% perfect (the not-staged removal of the file c which is also in the index as a new file), but so far it's the best solution I've found.