diff --git a/docs/api.md b/docs/api.md
index c319320..43d152a 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -175,6 +175,33 @@ def test_something():
     assert response.json() == {"id": 123}
 ```
 
+### Manipulating Existing Patterns
+
+Clearing all existing patterns:
+
+``` python
+import respx
+
+
+@respx.mock
+def test_something():
+    respx.get("https://foo.bar/baz", status_code=404)
+    respx.clear()  # no patterns will be matched after this call
+```
+
+Removing and optionally re-using an existing pattern by alias:
+
+``` python
+import respx
+
+
+@respx.mock
+def test_something():
+    respx.get("https://foo.bar/", status_code=404, alias="index")
+    request_pattern = respx.pop("index")
+    respx.get(request_pattern.url, status_code=200)
+```
+
 ---
 
 ## Response Content
diff --git a/respx/transports.py b/respx/transports.py
index 574058c..8181e0f 100644
--- a/respx/transports.py
+++ b/respx/transports.py
@@ -1,5 +1,17 @@
 import warnings
-from typing import Any, Callable, Coroutine, Dict, List, Optional, Pattern, Tuple, Union
+from typing import (
+    Any,
+    Callable,
+    Coroutine,
+    Dict,
+    List,
+    Optional,
+    Pattern,
+    Tuple,
+    TypeVar,
+    Union,
+    overload,
+)
 
 import asynctest
 from httpcore import (
@@ -23,6 +35,8 @@ from .models import (
     build_response,
 )
 
+DefaultType = TypeVar("DefaultType", bound=Any)
+
 
 class BaseMockTransport:
     def __init__(
@@ -60,6 +74,31 @@ class BaseMockTransport:
     def __getitem__(self, alias: str) -> Optional[RequestPattern]:
         return self.aliases.get(alias)
 
+    @overload
+    def pop(self, alias: str) -> RequestPattern:
+        ...
+
+    @overload
+    def pop(
+        self, alias: str, default: DefaultType
+    ) -> Union[RequestPattern, DefaultType]:
+        ...
+
+    def pop(self, alias, default=...):
+        """
+        Removes a pattern by alias and returns it.
+
+        Raises KeyError when `default` not provided and alias is not found.
+        """
+        try:
+            request_pattern = self.aliases.pop(alias)
+            self.patterns.remove(request_pattern)
+            return request_pattern
+        except KeyError as ex:
+            if default is ...:
+                raise ex
+            return default
+
     def add(
         self,
         method: Union[str, Callable, RequestPattern],

Poping a request pattern by alias
I'm using `respx` in pytest fixtures. I found a common issue that I was not able to solve easily: Updating one request pattern in a collection of mocked requests, provided by global fixture.

Example:

```python
@pytest.fixture
def mock_services() -> Iterator[MockTransport]:
    base_services_mock.post(re.compile(SERVICE_A_URL + "/endpoint_a.*"), content=fake_content(), alias="endpoint a")
    base_services_mock.get(re.compile(SERVICE_A_URL + "/endpoint_b.*"), content=fake_content(), alias="endpoint b")
    # more endpoint mocks ...
    yield base_services_mock

@staticmethod
def test_endpoint_a_only(mock_services: MockTransport):
    request_mock = mock_services.aliases.pop("endpoint a")  # remove previous mock
    mock_services.patterns.remove(request_mock)
    mock_services.post(request_mock.url, status_code=HTTP_500_INTERNAL_SERVER_ERROR)

    # run the test. "endpoint a" has been modified, "endpoint b" remains default.
```

I looked inside the class and the `pop` + `remove` functionality could be easily exposed as `pop`, since the class already mimics `dict` interface.

I suggested this change in #60 
diff --git a/tests/test_transports.py b/tests/test_transports.py
index e446250..3674503 100644
--- a/tests/test_transports.py
+++ b/tests/test_transports.py
@@ -85,3 +85,26 @@ async def test_httpcore_request():
             body = b"".join([chunk async for chunk in stream])
             await stream.aclose()
             assert body == b"foobar"
+
+
+@pytest.mark.asyncio
+async def test_transport_pop():
+    url = "https://foo.bar/"
+    alias = "get_alias"
+
+    transport = AsyncMockTransport()
+    transport.get(url, status_code=404, alias=alias)
+
+    request_pattern = transport.pop(alias)
+
+    assert request_pattern.response.status_code == 404
+    assert request_pattern.alias == alias
+    assert request_pattern.url == url
+
+    assert not transport.aliases
+    assert not transport.patterns
+
+    with pytest.raises(KeyError):
+        transport.pop(alias)
+
+    assert transport.pop(alias, "custom default") == "custom default"

pip install -e .
parse_log_pytest
pytest
pytest pytest-asyncio pytest-cov trio
3.8
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asynctest==0.13.0
attrs==25.3.0
certifi==2025.1.31
chardet==3.0.4
coverage==7.6.1
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
h11==0.9.0
h2==3.2.0
hpack==3.0.0
hstspreload==2025.1.1
httpcore==0.9.1
httpx==0.13.3
hyperframe==5.2.0
idna==2.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
outcome==1.3.0.post0
packaging @ file:///croot/packaging_1720101850331/work
pluggy==1.5.0
pytest==8.3.5
pytest-asyncio==0.24.0
pytest-cov==5.0.0
-e git+https://github.com/lundberg/respx.git@e4994013259bcf1b44aa202f55d0449198e312f0#egg=respx
rfc3986==1.5.0
sniffio==1.3.1
sortedcontainers==2.4.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
trio==0.27.0

name: respx
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
  - exceptiongroup=1.2.0=py38h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - 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=3.0.16=h5eee18b_0
  - packaging=24.1=py38h06a4308_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py38h06a4308_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asynctest==0.13.0
      - attrs==25.3.0
      - certifi==2025.1.31
      - chardet==3.0.4
      - coverage==7.6.1
      - h11==0.9.0
      - h2==3.2.0
      - hpack==3.0.0
      - hstspreload==2025.1.1
      - httpcore==0.9.1
      - httpx==0.13.3
      - hyperframe==5.2.0
      - idna==2.10
      - outcome==1.3.0.post0
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-asyncio==0.24.0
      - pytest-cov==5.0.0
      - rfc3986==1.5.0
      - sniffio==1.3.1
      - sortedcontainers==2.4.0
      - trio==0.27.0
prefix: /opt/conda/envs/respx

tests/test_transports.py::test_transport_pop
tests/test_transports.py::test_sync_transport tests/test_transports.py::test_async_transport tests/test_transports.py::test_transport_assertions tests/test_transports.py::test_httpcore_request
docs/api.md respx/transports.py
docs/api.md respx/transports.py