Fixed GIS tests to again skip without error when GEOS is not installed.
Fixed #23872 -- Removed sensitivity of migrations tests to CWD.
Fixed #21794 -- Removed deprecation warning for abstract models outside an app.
Fixed #23410 -- Avoided unnecessary rollbacks in related apps when migrating backwards.
Fixed #23873 -- Improved GIS error message when GEOS is not installed.

Thanks Claude for writing the patch.
Added another migration-executor test to avoid regressions.
Fixed #23876 -- Removed dead code in SQLAggregateCompiler.
Fixed #12098 -- Simplified HttpRequest.__repr__().
Fixed #23817 -- Updated docs on QuerySet evaluation

Removed inaccurate info about partial evaluation after refs #18702.
Added information on modifying sliced QuerySets; refs #22503.
Added AutoField introspection for MySQL

Refs #23748.
Added AutoField introspection for PostgreSQL

Refs #23748.
Added missing backticks to form validation docs
Added some directories on Jenkins to flake8 exclude.
Fixed #23844 -- Used topological sort for migration operation dependency resolution.

This removes the concept of equality between operations to guarantee
compatilibity with Python 3.

Python 3 requires equality to result in identical object hashes. It's
impossible to implement a unique hash that preserves equality as
operations such as field creation depend on being able to accept
arbitrary dicts that cannot be hashed reliably.

Thanks Klaas van Schelven for the original patch in
13d613f80011852404198dfafd1f09c0c0ea42e6.
Fixed #23605 -- Fixed nested subquery regression

Added relabeled_clone() method to sql.Query to fix the problem. It
manifested itself in rare cases where at least double nested subquery's
filter condition might target non-existing alias.

Thanks to Trac alias ris for reporting the problem.
Added test for ValidationError.messages
Reduced reduce() usage; refs #23796.

django.core.exceptions.ValidationError.messages() and
django.db.backends.schema.BaseDatabaseSchemaEditor._alter_field():
Replaced reduce(operator.add, ...) w/uncoupled, explicit sum()
Removed reduce() usage in makemigrations; refs #23796.

A lambda all_items_equal() replaced a reduce() that was broken for potential
3+-way merges. A reduce(operator.eq, ...) accumulates bools and can't
generically check equality of all items in a sequence:

>>> bool(reduce(operator.eq, [('migrations', '0001_initial')] * 3))
False

The code now counts the number of common ancestors to calculate slice offsets
for the branches. Each branch shares the same number of common ancestors.

The common_ancestor for loop statement had incomplete branch coverage.
Fixed duplicate index error on Oracle; refs #23859.

Refers to regression introduced in 7b4a994599b75a07cb07d1e0cc26b3bbf25ab7a6
Added a comment for test of refs #20278.