threads / discuss / 43316

Re: changing log entries

Subject: Re: changing log entries

## tl;dr

5 messages between Dec 13, 2006 and Dec 15, 2006.

replies: 4people: 4as markdown or json

Jon Masters· Dec 13, 2006, 23:08 UTC · lore

changing log entries

Hi,

So I figured out that the problem with "Can't lock ref" was down to not having set one of the scripts executable on the http server. Great.

Anyway, now I would like to change an existing log entry to make it a bit cleaner (read: add a first line that's under 80 characters). What's the best way to change an existing log entry for a commit?

Jon.
Jakub Narebski· Dec 13, 2006, 23:22 UTC · re: Jon Masters · lore
Jon Masters wrote:
> Anyway, now I would like to change an existing log entry to make it a
> bit cleaner (read: add a first line that's under 80 characters). What's
> the best way to change an existing log entry for a commit?
See top two answers in http://git.or.cz/gitwiki/GitTips
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
Shawn Pearce· Dec 13, 2006, 23:24 UTC · re: Jon Masters · lore
Jon Masters <jcm@redhat.com> wrote:
Show 8 quoted lines
> Hi,
> 
> So I figured out that the problem with "Can't lock ref" was down to not
> having set one of the scripts executable on the http server. Great.
> 
> Anyway, now I would like to change an existing log entry to make it a
> bit cleaner (read: add a first line that's under 80 characters). What's
> the best way to change an existing log entry for a commit?
If its the most recent commit on that branch, "git commit --amend".

Otherwise dump out the branch to patches with git format-patch, amend the commit in question, then replay the patches with git am.

Or use StGIT to uncommit the changes, pop them off, fix the commit, then repush the patches and recommit in StGIT.

Note that any of the above methods change the SHA1 of that commit and every commit which follows it on that branch. Consequently it is generally considered to be impolite to edit commits without warning which you have already published, as another person may be basing their own work off that commit.

Andy Parkins· Dec 14, 2006, 10:37 UTC · re: Jon Masters · lore
On Wednesday 2006 December 13 23:08, Jon Masters wrote:
> Anyway, now I would like to change an existing log entry to make it a
> bit cleaner (read: add a first line that's under 80 characters). What's
> the best way to change an existing log entry for a commit?
If it's HEAD you want to change:
 git-commit --amend

If it's not, it's a bit harder. You could pull each commit out as a patch and apply them again later after a git-reset. However, git has a tool for automating a lot of that: git-rebase. man git-rebase has some excellent examples.

 * -- A -- B -- C (master)
Let's say you want to edit A; make a new branch at A:
$ git branch temp-edit-branch master^^
 
 * -- A (temp-edit-branch)
       \
        B -- C (master)

Edit A with git-commit --amend. This makes a new A, A' that has the new commit message:

 * -- A' (temp-edit-branch)
  \
   A -- B -- C (master)

Then you switch to "master" and rebase master onto temp-edit-branch; you can then delete temp-edit-branch

$ git-checkout master $ git-rebase temp-edit-branch $ git branch -D temp-edit-branch

 * -- A' -- B' -- C' (master)
  \
   A -- B -- C

Note that A-B-C are now dangling commits; a git-prune would be needed to clean them out of the repository.

The important thing to realise is that you can never really edit a commit. The best you can do is reapply it. In this example, the fact that B' makes the same change as B is irrelevant - they are two separate commits.

Note: this is only workable if you haven't pushed this branch to another 
repository.  The other repository would retain the original A--B--C branch 
and you will get "won't fast forward" errors if you try to push the 
new "A'--B'--C'" branch.
Andy
-- 
Dr Andy Parkins, M Eng (hons), MIEE
Jakub Narebski· Dec 15, 2006, 08:48 UTC · re: Andy Parkins · lore
Andy Parkins wrote:
Show 36 quoted lines
> On Wednesday 2006 December 13 23:08, Jon Masters wrote:
> 
>> Anyway, now I would like to change an existing log entry to make it a
>> bit cleaner (read: add a first line that's under 80 characters). What's
>> the best way to change an existing log entry for a commit?
> 
> If it's HEAD you want to change:
>  git-commit --amend
> 
> If it's not, it's a bit harder.  You could pull each commit out as a patch and 
> apply them again later after a git-reset.  However, git has a tool for 
> automating a lot of that:  git-rebase.  man git-rebase has some excellent 
> examples.
> 
>  * -- A -- B -- C (master)
> 
> Let's say you want to edit A; make a new branch at A:
> 
> $ git branch temp-edit-branch master^^
>  
>  * -- A (temp-edit-branch)
>        \
>         B -- C (master)
> 
> Edit A with git-commit --amend.  This makes a new A, A' that has the new 
> commit message:
> 
>  * -- A' (temp-edit-branch)
>   \
>    A -- B -- C (master)
> 
> Then you switch to "master" and rebase master onto temp-edit-branch; you can 
> then delete temp-edit-branch
> 
> $ git-checkout master
> $ git-rebase temp-edit-branch
Theoretically you should do
$ git rebase --onto temp-edit-branch master^^ master

but thanks to automatic detection that patch is already applied the above also should work. Well, unless you edit the commit so much that git does not recognize it as the same commit...

Show 5 quoted lines
> $ git branch -D temp-edit-branch
> 
>  * -- A' -- B' -- C' (master)
>   \
>    A -- B -- C
...in which case "git rebase temp-edit-branch master" would give you
  * -- A' --A* -- B* -- C* (master)
   \
    A -- B -- C
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git

← back to recent threads