diff --git a/guix/git.scm b/guix/git.scm
index 0d8e617cc9c0f32b4a3658827d5961edb91f6a8a..19c1cb59d313119fc30f3620cdb663b3cbb6706d 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -29,6 +29,7 @@ (define-module (guix git)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (guix sets)
+  #:use-module ((guix diagnostics) #:select (leave))
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
@@ -39,6 +40,7 @@ (define-module (guix git)
             honor-system-x509-certificates!
 
             with-repository
+            with-git-error-handling
             false-if-git-not-found
             update-cached-checkout
             url+commit->name
@@ -209,6 +211,23 @@ (define-syntax-rule (with-repository directory repository exp ...)
   (call-with-repository directory
                         (lambda (repository) exp ...)))
 
+(define (report-git-error error)
+  "Report the given Guile-Git error."
+  ;; Prior to Guile-Git commit b6b2760c2fd6dfaa5c0fedb43eeaff06166b3134,
+  ;; errors would be represented by integers.
+  (match error
+    ((? integer? error)                           ;old Guile-Git
+     (leave (G_ "Git error ~a~%") error))
+    ((? git-error? error)                         ;new Guile-Git
+     (leave (G_ "Git error: ~a~%") (git-error-message error)))))
+
+(define-syntax-rule (with-git-error-handling body ...)
+  (catch 'git-error
+    (lambda ()
+      body ...)
+    (lambda (key err)
+      (report-git-error err))))
+
 (define (load-git-submodules)
   "Attempt to load (git submodules), which was missing until Guile-Git 0.2.0.
 Return true on success, false on failure."
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index f95395716163ccdcc0f226488018a9122502b507..807daec593d4aed757b0a4e36e4da25a27462747 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -63,7 +63,6 @@ (define-module (guix scripts pull)
   #:re-export (display-profile-content
                channel-commit-hyperlink)
   #:export (channel-list
-            with-git-error-handling
             guix-pull))
 
 
@@ -464,23 +463,6 @@ (define (honor-x509-certificates store)
   (unless (honor-system-x509-certificates!)
     (honor-lets-encrypt-certificates! store)))
 
-(define (report-git-error error)
-  "Report the given Guile-Git error."
-  ;; Prior to Guile-Git commit b6b2760c2fd6dfaa5c0fedb43eeaff06166b3134,
-  ;; errors would be represented by integers.
-  (match error
-    ((? integer? error)                           ;old Guile-Git
-     (leave (G_ "Git error ~a~%") error))
-    ((? git-error? error)                         ;new Guile-Git
-     (leave (G_ "Git error: ~a~%") (git-error-message error)))))
-
-(define-syntax-rule (with-git-error-handling body ...)
-  (catch 'git-error
-    (lambda ()
-      body ...)
-    (lambda (key err)
-      (report-git-error err))))
-
 
 ;;;
 ;;; Profile.
diff --git a/guix/scripts/time-machine.scm b/guix/scripts/time-machine.scm
index f9bcec651af59901cb1ec7f947741bd66fd101ca..441673b7801b9cd25e67378dc4cefd39c4092abb 100644
--- a/guix/scripts/time-machine.scm
+++ b/guix/scripts/time-machine.scm
@@ -24,10 +24,12 @@ (define-module (guix scripts time-machine)
   #:use-module (guix channels)
   #:use-module (guix store)
   #:use-module (guix status)
+  #:use-module ((guix git)
+                #:select (with-git-error-handling))
   #:use-module ((guix utils)
                 #:select (%current-system))
   #:use-module ((guix scripts pull)
-                #:select (with-git-error-handling channel-list))
+                #:select (channel-list))
   #:use-module ((guix scripts build)
                 #:select (%standard-build-options
                           show-build-options-help