4

I know how to edit an old commit manually:

$ git log --pretty=format:'%h %s' 60e5ed9 Second commit 0fbc8ed First commit $ git rebase --interactive 0fbc8ed # Going back to 'First commit' # * $EDITOR gets fired up * # change 'pick 0fbc8ed' to 'edit 0fbc8ed' $ echo 'Hello Kitteh!' > some_file $ git add some_file $ git commit --amend -m 'some message' $ git rebase --continue # Go back 

The problem here:

git rebase --interactive fires up an editor, which is kinda bad for scripting purpose. Is there any way to overcome this, i.e. directly passing edit 0fbc8ed to the git rebase command?

Is it idiotic what I'm attempting or is there maybe a clearer, alternative way to do this?

There is a similar question, but in my case I want to change pick to edit:

How can I automatically accept what git rebase --interactive presents to me?

1

2 Answers 2

2

This is a job for "git filter-branch" and the option "--commit-filter". Look at the manual page here exists a example section.

Sign up to request clarification or add additional context in comments.

4 Comments

git commit --fixup plus git rebase -i --autosquash is much better
yea you are right, but --fixup prepend on your message a "fixup!" - or? and you can only change the subject line of a commit?
It is git commit --fixup <SHA-to-fix>, and then rebase -i --autosquash <SHA-to-fix>~1 squashes the fixup commit with the one you're fixing, and the magic happens
This looks promising. But rebase -i still spawns an editor? But I guess I can set EDITOR to /bin/true to auto-accept it Edit: Yupp, this works. Thanks a lot!
2

You can do the same thing without an interactive rebase:

git branch some_temporary_name # to save your initial place git reset --hard commit_you_want_to_change ...edit... git commit --amend -m 'some message' git rebase your_initial_branch_name some_temporary_name git checkout your_initial_branch_name git merge some_temporary_name # This will be a ff since you rebased git branch -d some_temporary_name # remove unneeded branch 

4 Comments

git commit --fixup plus git rebase -i --autosquash is much better (once more :) )
@CharlesB -- Won't git rebase -i --autosquash still bring up an editor?
Yes, but it's just for checking what it'll do, normally you don't have to edit anything. Just quit the editor. Think it as a confirmation dialog.
As mentioned above you can set the EDITOR env-variable to /bin/true to auto-accept it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.