diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py
index ca83a58..f375913 100644
--- a/pre_commit/commands/autoupdate.py
+++ b/pre_commit/commands/autoupdate.py
@@ -106,7 +106,7 @@ def _write_new_config_file(path, output):
         f.write(to_write)
 
 
-def autoupdate(runner, tags_only, repo=None):
+def autoupdate(runner, tags_only, repos=()):
     """Auto-update the pre-commit config to the latest versions of repos."""
     migrate_config(runner, quiet=True)
     retv = 0
@@ -120,7 +120,7 @@ def autoupdate(runner, tags_only, repo=None):
             is_local_repo(repo_config) or
             is_meta_repo(repo_config) or
             # Skip updating any repo_configs that aren't for the specified repo
-            repo and repo != repo_config['repo']
+            repos and repo_config['repo'] not in repos
         ):
             output_repos.append(repo_config)
             continue
diff --git a/pre_commit/main.py b/pre_commit/main.py
index 16b6c3b..e2f48ed 100644
--- a/pre_commit/main.py
+++ b/pre_commit/main.py
@@ -168,7 +168,8 @@ def main(argv=None):
         ),
     )
     autoupdate_parser.add_argument(
-        '--repo', help='Only update this repository.',
+        '--repo', dest='repos', action='append', metavar='REPO',
+        help='Only update this repository -- may be specified multiple times.',
     )
 
     migrate_config_parser = subparsers.add_parser(
@@ -251,7 +252,7 @@ def main(argv=None):
             return autoupdate(
                 runner,
                 tags_only=not args.bleeding_edge,
-                repo=args.repo,
+                repos=args.repos,
             )
         elif args.command == 'migrate-config':
             return migrate_config(runner)

Autoupdate, select, multiple repositories
Brought up from #657

As noted by @asottile, we can do

`pre-commit autoupdate --repo repo1 --repo repo2 --repo repo3`

to update multiple repositories.

That can be implemented pretty easily with `action='append'` -- and changing the same parts as #657
diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py
index 91e7733..8fe4583 100644
--- a/tests/commands/autoupdate_test.py
+++ b/tests/commands/autoupdate_test.py
@@ -138,7 +138,7 @@ def test_autoupdate_out_of_date_repo_with_correct_repo_name(
     runner = Runner('.', C.CONFIG_FILE)
     before = open(C.CONFIG_FILE).read()
     repo_name = 'file://{}'.format(out_of_date_repo.path)
-    ret = autoupdate(runner, tags_only=False, repo=repo_name)
+    ret = autoupdate(runner, tags_only=False, repos=(repo_name,))
     after = open(C.CONFIG_FILE).read()
     assert ret == 0
     assert before != after
@@ -158,7 +158,7 @@ def test_autoupdate_out_of_date_repo_with_wrong_repo_name(
     runner = Runner('.', C.CONFIG_FILE)
     before = open(C.CONFIG_FILE).read()
     # It will not update it, because the name doesn't match
-    ret = autoupdate(runner, tags_only=False, repo='wrong_repo_name')
+    ret = autoupdate(runner, tags_only=False, repos=('wrong_repo_name',))
     after = open(C.CONFIG_FILE).read()
     assert ret == 0
     assert before == after
diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py
index 00d5eff..ea6727e 100644
--- a/tests/commands/install_uninstall_test.py
+++ b/tests/commands/install_uninstall_test.py
@@ -187,14 +187,11 @@ def test_unicode_merge_commit_message(tempdir_factory):
     with cwd(path):
         assert install(Runner(path, C.CONFIG_FILE)) == 0
         cmd_output('git', 'checkout', 'master', '-b', 'foo')
-        cmd_output('git', 'commit', '--allow-empty', '-n', '-m', 'branch2')
+        cmd_output('git', 'commit', '--allow-empty', '-m', 'branch2')
         cmd_output('git', 'checkout', 'master')
         cmd_output('git', 'merge', 'foo', '--no-ff', '--no-commit', '-m', '☃')
         # Used to crash
-        cmd_output_mocked_pre_commit_home(
-            'git', 'commit', '--no-edit',
-            tempdir_factory=tempdir_factory,
-        )
+        cmd_output('git', 'commit', '--no-edit')
 
 
 def test_install_idempotent(tempdir_factory):

pip install -e .
parse_log_pytest
requirements.txt
3.6
requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aspy.yaml==1.3.0
attrs==22.2.0
cached-property==1.5.2
certifi==2021.5.30
cfgv==3.3.1
coverage==6.2
distlib==0.3.9
filelock==3.4.1
flake8==5.0.4
identify==2.4.4
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
mccabe==0.7.0
mock==5.2.0
nodeenv==1.6.0
packaging==21.3
platformdirs==2.4.0
pluggy==1.0.0
-e git+https://github.com/pre-commit/pre-commit.git@8abfb37fdf8eac15940cfdeccb0a39f47b53df62#egg=pre_commit
py==1.11.0
pycodestyle==2.9.1
pyflakes==2.5.0
pyparsing==3.1.4
pytest==7.0.1
pytest-env==0.6.2
PyYAML==6.0.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
virtualenv==20.17.1
zipp==3.6.0

name: pre-commit
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aspy-yaml==1.3.0
      - attrs==22.2.0
      - cached-property==1.5.2
      - cfgv==3.3.1
      - coverage==6.2
      - distlib==0.3.9
      - filelock==3.4.1
      - flake8==5.0.4
      - identify==2.4.4
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - mccabe==0.7.0
      - mock==5.2.0
      - nodeenv==1.6.0
      - packaging==21.3
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-env==0.6.2
      - pyyaml==6.0.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - virtualenv==20.17.1
      - zipp==3.6.0
prefix: /opt/conda/envs/pre-commit

tests/commands/autoupdate_test.py::test_autoupdate_out_of_date_repo_with_correct_repo_name tests/commands/autoupdate_test.py::test_autoupdate_out_of_date_repo_with_wrong_repo_name
tests/commands/autoupdate_test.py::test_updates_old_format_to_new_format tests/commands/install_uninstall_test.py::test_install_in_submodule_and_run tests/commands/install_uninstall_test.py::test_environment_not_sourced
tests/commands/autoupdate_test.py::test_up_to_date_repo tests/commands/autoupdate_test.py::test_autoupdate_up_to_date_repo tests/commands/autoupdate_test.py::test_autoupdate_old_revision_broken tests/commands/autoupdate_test.py::test_out_of_date_repo tests/commands/autoupdate_test.py::test_autoupdate_out_of_date_repo tests/commands/autoupdate_test.py::test_does_not_reformat tests/commands/autoupdate_test.py::test_loses_formatting_when_not_detectable tests/commands/autoupdate_test.py::test_autoupdate_tagged_repo tests/commands/autoupdate_test.py::test_autoupdate_tags_only tests/commands/autoupdate_test.py::test_hook_disppearing_repo_raises tests/commands/autoupdate_test.py::test_autoupdate_hook_disappearing_repo tests/commands/autoupdate_test.py::test_autoupdate_local_hooks tests/commands/autoupdate_test.py::test_autoupdate_local_hooks_with_out_of_date_repo tests/commands/autoupdate_test.py::test_autoupdate_meta_hooks tests/commands/install_uninstall_test.py::test_is_not_script tests/commands/install_uninstall_test.py::test_is_script tests/commands/install_uninstall_test.py::test_is_previous_pre_commit tests/commands/install_uninstall_test.py::test_install_pre_commit tests/commands/install_uninstall_test.py::test_install_hooks_directory_not_present tests/commands/install_uninstall_test.py::test_install_hooks_dead_symlink tests/commands/install_uninstall_test.py::test_uninstall_does_not_blow_up_when_not_there tests/commands/install_uninstall_test.py::test_uninstall tests/commands/install_uninstall_test.py::test_install_pre_commit_and_run tests/commands/install_uninstall_test.py::test_install_pre_commit_and_run_custom_path tests/commands/install_uninstall_test.py::test_commit_am tests/commands/install_uninstall_test.py::test_unicode_merge_commit_message tests/commands/install_uninstall_test.py::test_install_idempotent tests/commands/install_uninstall_test.py::test_failing_hooks_returns_nonzero tests/commands/install_uninstall_test.py::test_install_existing_hooks_no_overwrite tests/commands/install_uninstall_test.py::test_install_existing_hook_no_overwrite_idempotent tests/commands/install_uninstall_test.py::test_failing_existing_hook_returns_1 tests/commands/install_uninstall_test.py::test_install_overwrite_no_existing_hooks tests/commands/install_uninstall_test.py::test_install_overwrite tests/commands/install_uninstall_test.py::test_uninstall_restores_legacy_hooks tests/commands/install_uninstall_test.py::test_replace_old_commit_script tests/commands/install_uninstall_test.py::test_uninstall_doesnt_remove_not_our_hooks tests/commands/install_uninstall_test.py::test_installs_hooks_with_hooks_True tests/commands/install_uninstall_test.py::test_install_hooks_command tests/commands/install_uninstall_test.py::test_installed_from_venv tests/commands/install_uninstall_test.py::test_pre_push_integration_failing tests/commands/install_uninstall_test.py::test_pre_push_integration_accepted tests/commands/install_uninstall_test.py::test_pre_push_new_upstream tests/commands/install_uninstall_test.py::test_pre_push_integration_empty_push tests/commands/install_uninstall_test.py::test_pre_push_legacy tests/commands/install_uninstall_test.py::test_commit_msg_integration_failing tests/commands/install_uninstall_test.py::test_commit_msg_integration_passing tests/commands/install_uninstall_test.py::test_commit_msg_legacy tests/commands/install_uninstall_test.py::test_install_disallow_mising_config tests/commands/install_uninstall_test.py::test_install_allow_mising_config tests/commands/install_uninstall_test.py::test_install_temporarily_allow_mising_config
pre_commit/commands/autoupdate.py pre_commit/main.py
pre_commit/commands/autoupdate.py pre_commit/main.py