git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Paolo Bonzini <bonzini@gnu.org>
To: Robert Haines <rhaines@manchester.ac.uk>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: Pushing an --amend-ed commit [and a git-merge-theirs strategy]
Date: Mon, 02 Jun 2008 16:55:53 +0200	[thread overview]
Message-ID: <484409F9.5020807@gnu.org> (raw)
In-Reply-To: <6B355924-0EA9-4AF8-B051-F17FC4530495@manchester.ac.uk>


> 1) Right, changes all done and committed. Push to public repo.
> 2) Bugger, missed out an obvious one-liner in a Makefile. Make change 
> and --amend that last commit.
> 3) Push to public repo again... Ah, "Not a strict subset" error, can't 
> push...
> 
> It's obvious (I think) to me why I get this error - the commit now has a 
> different hash so it looks like it would be the wrong thing to do to 
> allow the push as far as git is concerned. Right?
> 
> So, is it safe to "use the --force" in this instance when pushing? This 
> should just replace the old commit with the --amended commit with no 
> side-effects, shouldn't it?

Yes, but it would screw up other people that pulled from you.

If that's an issue (it most likely is, unless you're just pushing just 
to your own mirror repository), it is better if you do it the other way 
round: adding your commits on top of origin^, starting from the one that 
fixed a typo.  In other words, make the history look like you hadn't 
used --amend.

Do like this: first create git-merge-theirs somewhere in your path; it's 
this three-line script, and it has to have that name.

#! /bin/sh
eval git reset \$$# -- .
git-checkout-index -q -f -a

Don't forget to make it executable. :-)

And here's the magic incantation to be executed on branch master:

git rebase -s theirs --onto origin/master origin/master^ HEAD

Basically, it uses the script created above to place the commits _after_ 
origin/master^ _above_ origin/master.  What the script does is resolve 
conflicts by taking the version in your "master" branch.

To do so, git-merge-theirs uses "git reset" to check out into the index 
the last head passed to it (which we know is the next commit being added 
to the rebase).  Then it extracts the index into the working tree to 
avoid complaints from "git commit" about files not being up-to-date.

There is no builtin git-merge-theirs strategy; if there was one, it 
should make sure that it was only called with two heads, for example.

Anyway, now you can push again.  I suggest however reviewing your commit 
messages and, if necessary, using "git rebase -i origin/master" to edit 
some of them.

Paolo

  reply	other threads:[~2008-06-02 14:56 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-02  9:51 Pushing an --amend-ed commit Robert Haines
2008-06-02 14:55 ` Paolo Bonzini [this message]
2008-06-03 17:49   ` Pushing an --amend-ed commit [and a git-merge-theirs strategy] Robert Haines
2008-06-03  0:08 ` Pushing an --amend-ed commit Matt Pearson
2008-06-03  0:22   ` Matt Pearson

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=484409F9.5020807@gnu.org \
    --to=bonzini@gnu.org \
    --cc=git@vger.kernel.org \
    --cc=rhaines@manchester.ac.uk \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).