### Apache Airflow version

2.2.2 (latest released)

### Operating System

MacOS 11.6.1

### Versions of Apache Airflow Providers

$ pip freeze | grep airflow
apache-airflow==2.2.2
apache-airflow-providers-celery==2.1.0
apache-airflow-providers-ftp==2.0.1
apache-airflow-providers-http==2.0.1
apache-airflow-providers-imap==2.0.1
apache-airflow-providers-sqlite==2.0.1

### Deployment

Other

### Deployment details

`airflow standalone`

### What happened

```
AttributeError: 'NoneType' object has no attribute 'update_relative'
```

### What you expected to happen

Task group should be set as downstream of `start` task, and upstream of `end` task

### How to reproduce

* Add the following code to dags folder

```python
from datetime import datetime

from airflow.decorators import dag, task, task_group


@dag(start_date=datetime(2023, 1, 1), schedule_interval="@once")
def test_dag_1():
    @task
    def start():
        pass

    @task
    def do_thing(x):
        print(x)

    @task_group
    def do_all_things():
        do_thing(1)
        do_thing(2)

    @task
    def end():
        pass

    start() >> do_all_things() >> end()


test_dag_1()
```

* Run `airflow standalone`

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

airflow/decorators/task_group.py
raise RuntimeError("A mapped @task_group cannot be called. Use `.map` and `.partial` instead")
    def _make_task_group(self, **kwargs) -> MappedTaskGroup:
        tg = MappedTaskGroup(**kwargs)
        tg.partial_kwargs = self.partial_kwargs
        tg.mapped_kwargs = self.mapped_kwargs
        return tg
    def partial(self, **kwargs) -> "MappedTaskGroupDecorator[R]":
        if self.partial_kwargs:
            raise RuntimeError("Already a partial task group")
        self.partial_kwargs.update(kwargs)
        return self
    def map(self, **kwargs) -> R:
        if self.mapped_kwargs:
            raise RuntimeError("Already a mapped task group")
        self.mapped_kwargs = kwargs
        call_kwargs = self.partial_kwargs.copy()
        duplicated_keys = set(call_kwargs).intersection(kwargs)
        if duplicated_keys:
            raise RuntimeError(f"Cannot map partial arguments: {', '.join(sorted(duplicated_keys))}")
        call_kwargs.update({k: object() for k in kwargs})
        return super().__call__(**call_kwargs)
    def __del__(self):
        if not self.mapped_kwargs:
            warnings.warn(f"Partial task group {self.function.__name__} was never mapped!")
@overload
def task_group(