diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RevListTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RevListTest.java
new file mode 100644
index 0000000..06fddc2
--- /dev/null
+++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RevListTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2021, kylezhao <kylezhao@tencent.com> and others.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.pgm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.lib.CLIRepositoryTestCase;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RevListTest extends CLIRepositoryTestCase {
+
+	private Git git;
+
+	@Override
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		git = new Git(db);
+	}
+
+	@Test
+	public void testWithParentsFlag() throws Exception {
+		List<RevCommit> commits = createCommitsForParentsFlag(git);
+		String result = toString(
+				execute("git rev-list HEAD --parents -- Test.txt"));
+
+		String expect = toString(
+				commits.get(3).name() + ' ' + commits.get(1).name(),
+				commits.get(1).name());
+
+		assertEquals(expect, result);
+	}
+
+	@Test
+	public void testWithoutParentsFlag() throws Exception {
+		List<RevCommit> commits = createCommitsForParentsFlag(git);
+		String result = toString(execute("git rev-list HEAD -- Test.txt"));
+
+		String expect = toString(commits.get(3).name(), commits.get(1).name());
+
+		assertEquals(expect, result);
+	}
+
+	private List<RevCommit> createCommitsForParentsFlag(Git git)
+			throws Exception {
+		List<RevCommit> commits = new ArrayList<>();
+		writeTrashFile("Test1.txt", "Hello world");
+		git.add().addFilepattern("Test1.txt").call();
+		commits.add(git.commit().setMessage("commit#0").call());
+		writeTrashFile("Test.txt", "Hello world!");
+		git.add().addFilepattern("Test.txt").call();
+		commits.add(git.commit().setMessage("commit#1").call());
+		writeTrashFile("Test1.txt", "Hello world!!");
+		git.add().addFilepattern("Test1.txt").call();
+		commits.add(git.commit().setMessage("commit#2").call());
+		writeTrashFile("Test.txt", "Hello world!!!");
+		git.add().addFilepattern("Test.txt").call();
+		commits.add(git.commit().setMessage("commit#3").call());
+		return commits;
+	}
+}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java
index 822f899..696a924 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java
@@ -129,6 +129,9 @@
 			walk.setTreeFilter(AndTreeFilter.create(pathFilter,
 					TreeFilter.ANY_DIFF));
 		}
+		if (parents) {
+			walk.setRewriteParents(true);
+		}
 
 		if (revLimiter.size() == 1)
 			walk.setRevFilter(revLimiter.get(0));
