public static void HardReset (NGit.Repository repo, ObjectId newHead) { DirCache dc = null; try { // Reset head to upstream RefUpdate ru = repo.UpdateRef (Constants.HEAD); ru.SetNewObjectId (newHead); ru.SetForceUpdate (true); RefUpdate.Result rc = ru.Update (); switch (rc) { case RefUpdate.Result.NO_CHANGE: case RefUpdate.Result.NEW: case RefUpdate.Result.FAST_FORWARD: case RefUpdate.Result.FORCED: break; case RefUpdate.Result.REJECTED: case RefUpdate.Result.LOCK_FAILURE: throw new ConcurrentRefUpdateException (JGitText.Get ().couldNotLockHEAD, ru.GetRef (), rc); default: throw new JGitInternalException ("Reference update failed: " + rc); } dc = repo.LockDirCache (); RevWalk rw = new RevWalk (repo); RevCommit c = rw.ParseCommit (newHead); DirCacheCheckout checkout = new DirCacheCheckout (repo, null, dc, c.Tree); checkout.Checkout (); } catch { if (dc != null) dc.Unlock (); throw; } }