| Index: gclient_scm.py
 | 
| diff --git a/gclient_scm.py b/gclient_scm.py
 | 
| index 95c142f93c8954fab67b72a2e623dedc986824de..80b5c1f3a51f1a97712ad49b5a74cf901d598c81 100644
 | 
| --- a/gclient_scm.py
 | 
| +++ b/gclient_scm.py
 | 
| @@ -390,6 +390,20 @@ class GitWrapper(SCMWrapper):
 | 
|      if mirror:
 | 
|        url = mirror.mirror_path
 | 
|  
 | 
| +    # If we are going to introduce a new project, there is a possibility that
 | 
| +    # we are syncing back to a state where the project was originally a
 | 
| +    # sub-project rolled by DEPS (realistic case: crossing the Blink merge point
 | 
| +    # syncing backwards, when Blink was a DEPS entry and not part of src.git).
 | 
| +    # In such case, we might have a backup of the former .git folder, which can
 | 
| +    # be used to avoid re-fetching the entire repo again (useful for bisects).
 | 
| +    backup_dir = self.GetGitBackupDirPath()
 | 
| +    target_dir = os.path.join(self.checkout_path, '.git')
 | 
| +    if os.path.exists(backup_dir) and not os.path.exists(target_dir):
 | 
| +      gclient_utils.safe_makedirs(self.checkout_path)
 | 
| +      os.rename(backup_dir, target_dir)
 | 
| +      # Reset to a clean state
 | 
| +      self._Run(['reset', '--hard', 'HEAD'], options)
 | 
| +
 | 
|      if (not os.path.exists(self.checkout_path) or
 | 
|          (os.path.isdir(self.checkout_path) and
 | 
|           not os.path.exists(os.path.join(self.checkout_path, '.git')))):
 | 
| @@ -800,6 +814,12 @@ class GitWrapper(SCMWrapper):
 | 
|      base_url = self.url
 | 
|      return base_url[:base_url.rfind('/')] + url
 | 
|  
 | 
| +  def GetGitBackupDirPath(self):
 | 
| +    """Returns the path where the .git folder for the current project can be
 | 
| +    stages/restored. Use case: subproject moved from DEPS <-> outer project."""
 | 
| +    return os.path.join(self._root_dir,
 | 
| +                        'old_' + self.relpath.replace('/', '_')) + '.git'
 | 
| +
 | 
|    def _GetMirror(self, url, options):
 | 
|      """Get a git_cache.Mirror object for the argument url."""
 | 
|      if not git_cache.Mirror.GetCachePath():
 | 
| 
 |