You may be looking for:
git push origin $commit:$branch
Credit: http://blog.dennisrobinson.name/push-only-one-commit-with-git/
Explanatory notes:
- Pushing a commit pushes all commits before it (as Amber said). The
key is to reorder your commits first (
git rebase -i
), so they are
in the order you want to push them.
$commit
doesn't have to be a sha1. For example,
"HEAD~N" would push everything before the last N commits.
$branch
(typically "master" or "main") is the branch you push to – the remote branch. It does not have to be the same as a local branch.
- The suggested branch + cherry-pick method (suggested by midtiby)
works too, but for reordering purposes (such as getting the prework
in first), this avoids creating throwaway branches.
If the branch does not exist remotely, and you want to create it, it must be prefixed with refs/heads/
(to disambiguate branch from tag):
git push origin $commit:refs/heads/$new_branch
Pro tip: git-revise is a similar but better tool than git rebase (for local commits specifically). For my purposes, as a daily git user, I think it should be obligatory if you use git revise -i
a lot (which is of course quite necessary to produce high quality commits).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…