diff --git a/builtin/pull.c b/builtin/pull.c
index 9c4a00620a..8bbfcce729 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec)
 	const char *spec_src;
 	const char *merge_branch;
 
-	refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH);
+	refspec_item_init_or_die(&spec, refspec, 1);
 	spec_src = spec.src;
 	if (!*spec_src || !strcmp(spec_src, "HEAD"))
 		spec_src = "HEAD";
diff --git a/git-diff-pairs b/git-diff-pairs
new file mode 100755
index 0000000000000000000000000000000000000000..8eebe3117848710e6c09590e6e5481111801d698
GIT binary patch
diff --git a/refspec.c b/refspec.c
index c6ad515f04..db5a1c34a5 100644
--- a/refspec.c
+++ b/refspec.c
@@ -233,7 +233,7 @@ void refspec_clear(struct refspec *rs)
 int valid_fetch_refspec(const char *fetch_refspec_str)
 {
 	struct refspec_item refspec;
-	int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH);
+	int ret = refspec_item_init(&refspec, fetch_refspec_str, 1);
 	refspec_item_clear(&refspec);
 	return ret;
 }
@@ -249,7 +249,7 @@ void refspec_ref_prefixes(const struct refspec *rs,
 		if (item->negative)
 			continue;
 
-		if (rs->fetch == REFSPEC_FETCH) {
+		if (rs->fetch) {
 			if (item->exact_sha1)
 				continue;
 			prefix = item->src;
diff --git a/refspec.h b/refspec.h
index e2b5cc54ef..155494cd3a 100644
--- a/refspec.h
+++ b/refspec.h
@@ -32,11 +32,8 @@ struct refspec_item {
 
 struct string_list;
 
-#define REFSPEC_FETCH 1
-#define REFSPEC_PUSH 0
-
-#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH }
-#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH }
+#define REFSPEC_INIT_FETCH { .fetch = 1 }
+#define REFSPEC_INIT_PUSH { .fetch = 0 }
 
 /**
  * An array of strings can be parsed into a struct refspec using
@@ -47,7 +44,7 @@ struct refspec {
 	int alloc;
 	int nr;
 
-	int fetch;
+	unsigned fetch : 1;
 };
 
 int refspec_item_init(struct refspec_item *item, const char *refspec,
diff --git a/remote.c b/remote.c
index e609cf5c56..addd4a9999 100644
--- a/remote.c
+++ b/remote.c
@@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state,
 	ret->prune = -1;  /* unspecified */
 	ret->prune_tags = -1;  /* unspecified */
 	ret->name = xstrndup(name, len);
-	refspec_init(&ret->push, REFSPEC_PUSH);
-	refspec_init(&ret->fetch, REFSPEC_FETCH);
+	refspec_init(&ret->push, 0);
+	refspec_init(&ret->fetch, 1);
 	string_list_init_dup(&ret->server_options);
 
 	ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1,
diff --git a/transport-helper.c b/transport-helper.c
index d457b42550..43cd760119 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport)
 
 	data->helper = helper;
 	data->no_disconnect_req = 0;
-	refspec_init(&data->rs, REFSPEC_FETCH);
+	refspec_init(&data->rs, 1);
 
 	/*
 	 * Open the output as FILE* so strbuf_getline_*() family of
