Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
38 lines
1.3 KiB
Markdown
38 lines
1.3 KiB
Markdown
---
|
|
name: git-rebase
|
|
description: "Squash fixups into earlier commits, reorder commits, or reword commit messages, without needing an interactive editor."
|
|
---
|
|
|
|
# Git Rebase (Non-Interactive)
|
|
|
|
Since `git rebase -i` requires an interactive editor, use
|
|
`GIT_SEQUENCE_EDITOR` to supply the todo list via a script:
|
|
|
|
1. **Updating the HEAD commit:** If the commit you need to modify is
|
|
already at HEAD, just use `git commit --amend` directly. The
|
|
fixup+rebase workflow below is only needed for non-HEAD commits.
|
|
|
|
2. **Squashing fixups into existing commits:** Create fixup commits with
|
|
`git commit --fixup=<target-hash>`, then write a shell script that
|
|
outputs the desired todo (with `pick` and `fixup` lines in order)
|
|
and run:
|
|
|
|
```bash
|
|
GIT_SEQUENCE_EDITOR=/path/to/todo-script.sh git rebase -i <base>
|
|
```
|
|
|
|
Note: `--autosquash` alone without `-i` does **not** reorder or
|
|
squash anything.
|
|
|
|
3. **Rewording commit messages:** Use `git format-patch` to export
|
|
commits as patch files, edit the message headers in the patch
|
|
files, then reapply:
|
|
|
|
```bash
|
|
git format-patch <base> -o /tmp/patches/
|
|
# Edit the commit message in each /tmp/patches/000N-*.patch file
|
|
# (the message is between the Subject: line and the --- line)
|
|
git reset --hard <base>
|
|
git am /tmp/patches/*.patch
|
|
```
|