{ "uuid": [ { "value": "d1a650c6-fd8f-4509-801b-10c14f10344e" } ], "langcode": [ { "value": "en" } ], "type": [ { "target_id": "daily_email", "target_type": "node_type", "target_uuid": "8bde1f2f-eef9-4f2d-ae9c-96921f8193d7" } ], "revision_timestamp": [ { "value": "2025-05-11T09:00:55+00:00" } ], "revision_uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "revision_log": [], "status": [ { "value": true } ], "uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "title": [ { "value": "Useful Git configuration" } ], "created": [ { "value": "2022-09-19T00:00:00+00:00" } ], "changed": [ { "value": "2025-05-11T09:00:55+00:00" } ], "promote": [ { "value": false } ], "sticky": [ { "value": false } ], "default_langcode": [ { "value": true } ], "revision_translation_affected": [ { "value": true } ], "path": [ { "alias": "\/daily\/2022\/09\/19\/useful-git-configuration", "langcode": "en" } ], "body": [ { "value": "\n

Here are some snippets from my Git configuration file.<\/p>\n\n

These days, I use a much simpler workflow and configuration since doing more trunk-based development, but in general, I rebase instead of merging by default, and prefer to use fast-forward merges that doesn't create a merge commit.<\/p>\n\n

branch.autosetuprebase = always<\/code> and pull.rebase = true<\/code> configure Git to always rebase instead of pull. It does this for all branches, though I might override this for main<\/code> branches.<\/p>\n\n

pull.ff = only<\/code> and merge.ff = only<\/code> prevents creating a merge commit and will prevent the merge if it would create one. If I needed to override this, I could by using the --no-ff<\/code> option on the command line.<\/p>\n\n

I use checkout.defaultRemote = origin<\/code> to ensure that the origin<\/code> remote is used if I have multiple remotes configured, and push.default = upstream<\/code> to set the default remote to push to.<\/p>\n\n

merge.autoStash<\/code> allows for running merges on a dirty worktree by automatically creating and re-applying a stash of the changes, and fetch.prune<\/code> will automatically prune branches on fetch - keeping things tidy.<\/p>\n\n

I also have and use a number of aliases.<\/p>\n\n

Some like pl = pull<\/code> and ps = push<\/code> are shorter versions of existing commands, and some like aa = add --all<\/code>, fixup = commit --fixup<\/code> and some additional arguments to commands.<\/p>\n\n

I also have some like current-branch = rev-parse --abbrev-ref HEAD<\/code> and worktrees = worktree list<\/code> which add simple additional commands, and some like repush = !git pull --rebase && git push<\/code> which use execute shell commands to execute more complex commands or combine multiple commands.<\/p>\n\n

This is a snapshot of my Git configuration. The full version is on GitHub<\/a>.<\/p>\n\n ", "format": "full_html", "processed": "\n

Here are some snippets from my Git configuration file.<\/p>\n\n

These days, I use a much simpler workflow and configuration since doing more trunk-based development, but in general, I rebase instead of merging by default, and prefer to use fast-forward merges that doesn't create a merge commit.<\/p>\n\n

branch.autosetuprebase = always<\/code> and pull.rebase = true<\/code> configure Git to always rebase instead of pull. It does this for all branches, though I might override this for main<\/code> branches.<\/p>\n\n

pull.ff = only<\/code> and merge.ff = only<\/code> prevents creating a merge commit and will prevent the merge if it would create one. If I needed to override this, I could by using the --no-ff<\/code> option on the command line.<\/p>\n\n

I use checkout.defaultRemote = origin<\/code> to ensure that the origin<\/code> remote is used if I have multiple remotes configured, and push.default = upstream<\/code> to set the default remote to push to.<\/p>\n\n

merge.autoStash<\/code> allows for running merges on a dirty worktree by automatically creating and re-applying a stash of the changes, and fetch.prune<\/code> will automatically prune branches on fetch - keeping things tidy.<\/p>\n\n

I also have and use a number of aliases.<\/p>\n\n

Some like pl = pull<\/code> and ps = push<\/code> are shorter versions of existing commands, and some like aa = add --all<\/code>, fixup = commit --fixup<\/code> and some additional arguments to commands.<\/p>\n\n

I also have some like current-branch = rev-parse --abbrev-ref HEAD<\/code> and worktrees = worktree list<\/code> which add simple additional commands, and some like repush = !git pull --rebase && git push<\/code> which use execute shell commands to execute more complex commands or combine multiple commands.<\/p>\n\n

This is a snapshot of my Git configuration. The full version is on GitHub<\/a>.<\/p>\n\n ", "summary": null } ], "feeds_item": [ { "imported": "1970-01-01T00:33:45+00:00", "guid": null, "hash": "c064efff8a7c26a4e05fee32b076e0b2", "target_type": "feeds_feed", "target_uuid": "90c85284-7ca8-4074-9178-97ff8384fe76" } ] }