| Index: gclient_scm.py | 
| diff --git a/gclient_scm.py b/gclient_scm.py | 
| index 2b3f7aa702acf5ede91064c3f4714fa1938fe5bc..d36a95bb4e1918db3af4f3819503b8b63f40ff29 100644 | 
| --- a/gclient_scm.py | 
| +++ b/gclient_scm.py | 
| @@ -135,13 +135,16 @@ class GitWrapper(SCMWrapper, scm.GIT): | 
| file_list.extend([os.path.join(self.checkout_path, f) for f in files]) | 
| return | 
|  | 
| -    self._Run(['remote', 'update'], redirect_stdout=False) | 
| new_base = 'origin' | 
| if revision: | 
| new_base = revision | 
| +    cur_branch = self._Run(['symbolic-ref', 'HEAD']).split('/')[-1] | 
| +    merge_base = self._Run(['merge-base', 'HEAD', new_base]) | 
| +    self._Run(['remote', 'update'], redirect_stdout=False) | 
| files = self._Run(['diff', new_base, '--name-only']).split() | 
| file_list.extend([os.path.join(self.checkout_path, f) for f in files]) | 
| -    self._Run(['rebase', '-v', new_base], redirect_stdout=False) | 
| +    self._Run(['rebase', '-v', '--onto', new_base, merge_base, cur_branch], | 
| +                redirect_stdout=False) | 
| print "Checked out revision %s." % self.revinfo(options, (), None) | 
|  | 
| def revert(self, options, args, file_list): | 
|  |