git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: modifying the commits before push

From
DSDirk Süsserott <newsletter@dirk.my1.cc>
Date
Jan 18, 2012, 20:18 UTC
Message-ID
<4F17291A.8020600@dirk.my1.cc>
In-Reply-To
<87wr8o3nq0.fsf@gnu.org>
Am 18.01.2012 18:49 schrieb Sam Steingold:
Show 20 quoted lines
> Hi,
> I am trying to push:
> $ git status
> # On branch master
> # Your branch is ahead of 'origin/master' by 4 commits.
> #
> nothing to commit (working directory clean)
> $
> but `git push` fails with this:
> 
> remote: ERROR: Rejecting update because this commit email is not from ZZZ
> 
> What I need to do is
> - modify the 4 commits with a different e-mail and do `git push` again
> - make sure that all my commits in this repo are done with the correct e-mail
> 
> how do I do this?
> 
> thanks!
> 
Hi Sam,

to modify the last 4 commits you can use git filter-branch (see the manpage):

$ git checkout master
$ git filter-branch --env-filter \
   'GIT_COMMITTER_EMAIL="sds@gnu.org" \
    GIT_COMMITTER_NAME="Sam Steingold"' \
   HEAD~4..HEAD

It should tell you that it rewrites 4 commits. The original tree is saved under original/refs/heads/master. If sth. went wrong, reset your master to that point (easiest with gitk, it's steel blue). If it worked, you can delete the original/refs/heads/master like so:

$ git for-each-ref --format="%(refname)" \
    refs/original/ | xargs -n 1 git update-ref -d
Note: Whether it worked or not, remove the original refs afterwards,
because a second run of git filter-branch will fail if there's already
an "original" tree.

To change your address for future commits configure it in .gitconfig in your $HOME (--global) or on a per repo basis in .git/config (--local):

$ git config --global user.email "sds@gnu.org" $ git config --global user.name "Sam Steingold"

Or use git gui for this step (Edit -> Options).
HTH
    Dirk
Previous: Sam SteingoldNext: Sam Steingold
Message 2 of 4 in “modifying the commits before push”
  1. Sam SteingoldJan 18, 2012
  2. Dirk SüsserottJan 18, 2012
  3. Sam SteingoldJan 18, 2012
  4. Andreas SchwabJan 18, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.