User Tools

Site Tools


git:rebase

rebase

Edit, Move, Delete commits

git rebase -i #rewrite all commits in this branch
git rebase -i HEAD~3 # rewrite last 3 commits in this branch

This will open the default text editor with the specified commits.

NOTE that the order differs from the log. This order is chronological from top to bottom.

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
 
# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Then you can replace all the first word / action at each line, which will make what you want.

  • pick the commit will be moved where you specify.
  • edit the rebase will be stopped at this commit, making possible to submit any changes to it, adding, removing files, and then you must submit git commit –amend, finally then you can edit the message. Finally you must type git rebase –continue
  • squash the commit will be merged with its precedent

Change the date of a commit

To modify the timestamp of a commit while rebasing:

export newDate="`date`"
GIT_COMMITTER_DATE="$newDate" git commit --amend --no-edit --date "$newDate" && git rebase --continue

Or as a single command:

GIT_COMMITTER_DATE=(date) git commit --amend --no-edit --date "$GIT_COMMITTER_DATE"

References

git/rebase.txt · Last modified: 2020/10/01 23:06 by josep