From: Davide Fiorentino <davide.fiorentino@gmail.com>
To: git@vger.kernel.org
Subject: [BUG] rewriting history with filter-branch --commit-filter
Date: Wed, 20 Aug 2014 10:16:11 +0200 [thread overview]
Message-ID: <17DBA232-E993-4B3C-9952-90424976A28D@gmail.com> (raw)
Hi,
I was in the need to rewrite author name and email and commit date for a single commit and I guess I found a bug.
I run this git-filter script
$ git filter-branch --commit-filter ‘
if [ "$GIT_COMMIT"="9cfca27" ];
then GIT_AUTHOR_NAME=“Michelle”;
GIT_AUTHOR_EMAIL=“michelle@email.com”;
GIT_AUTHOR_DATE="2009-12-31T23:59:59”;
git commit-tree "$@“;
else
git commit-tree "$@“;
fi' HEAD
and found that all history was rewritten as if “Michelle” not only commit 9cfca27.
I also tried using full length commit id and a non-existing commit id: nothing changes.
In the following example to replicate the replicate the bug I’m using a non-existing commit id to make the effect more evident.
$ git --version
git version 2.0.1
$ mkdir project
$ cd project
$ git init
$ for i in 1 2 3; do echo "foo" >> foo$i.txt; git add foo$i.txt; git commit -m "foo$i"; done
[master (root-commit) 89dec6e] foo1
1 file changed, 1 insertion(+)
create mode 100644 foo1.txt
[master 8a3c8e5] foo2
1 file changed, 1 insertion(+)
create mode 100644 foo2.txt
[master a3ca061] foo3
1 file changed, 1 insertion(+)
create mode 100644 foo3.txt
$ git log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'
* a3ca061 (HEAD, master) foo3 - David, 4 seconds ago
* 8a3c8e5 foo2 - David, 4 seconds ago
* 89dec6e foo1 - David, 4 seconds ago
$ git filter-branch --commit-filter '
if [ "$GIT_COMMIT"="308add7" ];
then GIT_AUTHOR_NAME="Michelle";
GIT_AUTHOR_EMAIL="michelle@email.com";
GIT_AUTHOR_DATE="2009-12-31T23:59:59";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
$ git log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'
* 8937dff (HEAD, master) foo3 - Michelle, 4 years, 8 months ago
* 30e494e foo2 - Michelle, 4 years, 8 months ago
* 2a2ba4f foo1 - Michelle, 4 years, 8 months ago
* a3ca061 (refs/original/refs/heads/master) foo3 - David, 8 seconds ago
* 8a3c8e5 foo2 - David, 8 seconds ago
* 89dec6e foo1 - David, 8 seconds ago
$ git log
commit 8937dff7e6a3f5545c2242e3fd5d33acbabe6df4
Author: Michelle <michelle@email.com>
Date: Thu Dec 31 23:59:59 2009 +0100
foo3
commit 30e494ef27f16c5456e66214ea46b780581dfb48
Author: Michelle <michelle@email.com>
Date: Thu Dec 31 23:59:59 2009 +0100
foo2
commit 2a2ba4fd6b9627e237a12b47570a3f020a202b55
Author: Michelle <michelle@email.com>
Date: Thu Dec 31 23:59:59 2009 +0100
foo1
using env-filter, I managed to rewrite the history with this:
$ git filter-branch --env-filter '
name="$GIT_AUTHOR_NAME"
email="$GIT_AUTHOR_EMAIL"
if [ "$GIT_COMMIT" = "89dec6e4bc1fb3cff694ea83f5ed900dad43449e" ]
then
name="Michelle"
email="Michelle@email.com"
fi
export GIT_AUTHOR_NAME=“$name"
export GIT_AUTHOR_EMAIL=“$email"
'
Hope this helped.
Davide
next reply other threads:[~2014-08-20 8:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-20 8:16 Davide Fiorentino [this message]
2014-08-20 8:52 ` [BUG] rewriting history with filter-branch --commit-filter Jeff King
2014-08-20 8:59 ` Davide Fiorentino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=17DBA232-E993-4B3C-9952-90424976A28D@gmail.com \
--to=davide.fiorentino@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).