Setting git parent pointer to a different parent

Using git rebase. It’s the generic “take commit(s) and plop it/them on a different parent (base)” command in Git.

Some things to know, however:

  1. Since commit SHAs involve their parents, when you change the parent of a given commit, its SHA will change – as will the SHAs of all commits which come after it (more recent than it) in the line of development.

  2. If you’re working with other people, and you’ve already pushed the commit in question public to where they’ve pulled it, modifying the commit is probably a Bad Idea™. This is due to #1, and thus the resulting confusion the other users’ repositories will encounter when trying to figure out what happened due to your SHAs no longer matching theirs for the “same” commits. (See the “RECOVERING FROM UPSTREAM REBASE” section of the linked man page for details.)

That said, if you’re currently on a branch with some commits that you want to move to a new parent, it’d look something like this:

git rebase --onto <new-parent> <old-parent>

That will move everything after <old-parent> in the current branch to sit on top of <new-parent> instead.

Leave a Comment