git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: mat <matthieu.stigler@gmail.com>
To: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Cc: git@vger.kernel.org
Subject: Re: Looks like --amend create commit... don't understand
Date: Thu, 25 Feb 2010 21:45:06 +0100	[thread overview]
Message-ID: <4B86E152.1060108@gmail.com> (raw)
In-Reply-To: <vpqr5oa9tu5.fsf@bauges.imag.fr>

Dear Matthieu

Thanks a lot for your patient help and clear explanations, it is now 
much clearer for me!

Merci!

Matthieu


Matthieu Moy a écrit :
> mat <matthieu.stigler@gmail.com> writes:
>
>   
>> commits. But when looking on gitk, I see that
>> git commit blabla --amend
>>
>> does create each and every time a new commit,
>>     
>
> Yes. In Git, objects (including commits) are fundamentally immutable.
> You never modify an object, you create a new one, and usually forget
> about the old one.
>
>   
>> I mean: with git log,
>> there is only one commit, but on gitk, I see many, with the same name
>> but different revision ID....
>>     
>
> The revision ID is the sha1sum of the commit content. So, if they have
> different contents, they _must_ have different IDs.
>
> What happens is that you start with a history like
>
> A---B <- master
>
> and then try to --amend B. What happens is that you create a new B,
> say B', and let the branch you sit on point to this new one. Like:
>
> A---B
>  \
>   `-B' <- master
>
> Most of the time, B has just become unreachable: no branch contain it,
> no tag point to it, ... so you actually see
>
> A---B' <- master
>
> and it very much looks like you just modified B.
>
> Now, if you made B reachable before your commit --amend, like by
> pushing it to another repo, letting someone else pull from it, or if B
> is already part of another branch, then the situation is different.
>
> For example, if B is already part of a branch, like this:
>
>     .---- temp-branch
>     v
> A---B---C <- master
>
> If you do a checkout of temp-branch, then commit --amend, you end up
> in this situation :
>
> A---B---C <- master
>  \
>   `-B' <- temp-branch
>
> The solutions:
>
> * If you already published your commit, then don't amend it. Period.
>
> * If you want to rewrite an old commit in a branch, then read about
>   "git rebase -i", but make sure you read all the warnings about
>   rebase before you do so.
>
>   

  reply	other threads:[~2010-02-25 20:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-24 21:27 Looks like --amend create commit... don't understand mat
2010-02-24 22:01 ` Matthieu Moy
2010-02-25 20:45   ` mat [this message]
2010-02-25 22:25 ` Octavio Alvarez

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=4B86E152.1060108@gmail.com \
    --to=matthieu.stigler@gmail.com \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --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).