The &
marks an alias for the node (in your example &default
aliases the development node as “default”) and the *
references the aliased node with the name “default”. The <<:
inserts the content of that node.
Allow me to quote the YAML spec here:
Repeated nodes (objects) are first identified by an anchor (marked with the ampersand – “&”), and are then aliased (referenced with an asterisk – “*”) thereafter.
So parts of your example
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
actually expand to
development: &default
adapter: postgresql
database: dev_development
test: &test
adapter: postgresql # from the "default" alias
database: test_test # overridden by the duplicate key
and at the same time make the “test” node as well available under the alias “test”.
Have a look at the YAML specification – 2.2 Structures for further details (or if you need even moar docs++: 3.2.2.2. Anchors and Aliases)