Hi, thanks for your comments. 

Regarding the way of computing the base changeset id - I was just making an **assumption** out of experimentation with the code. And, as is looks, it comes from git-tfs itself:

In file TfsHelper.Common.cs:
```csharp
public int ChangesetId
{
    get
    {
          // some operations like applying rename gets previous item state
          // via looking at version of item minus 1. So will try to emulate
          // that this shelve is real revision.
          return _pendingChange.Version + 1;
     }
 }
```
That seems to be the actual reason of being of the mysterious "+1". :smile: 

As it seems after all this feedback, to be really on the safe side, I think the only robust way is to compute the base commit for each individual file from the shelveset first and bail out if it is not the same for all of them. That way, I could also get rid of the BaseChangesetID which I don't like either.. 

If I get some time, I will prepare some new commits.