# merge, keeping the remote as a new file?

7 messages from 2009-03-02 to 2009-03-02. Participants: Caleb Cushing, Jeff King, Charles Bailey, Björn Steinbrink, Jay Soffian.
Thread: https://gitlist.dev/t/18084

## Caleb Cushing, 2009-03-02 00:16

Subject: merge, keeping the remote as a new file?
Message-ID: <81bfc67a0903011616w32ebdad9ofc096f5d1fd3174a@mail.gmail.com>
URL: https://gitlist.dev/e/81bfc67a0903011616w32ebdad9ofc096f5d1fd3174a%40mail.gmail.com

```
 I have an unmerged file... the resolution I'd like to have is
checkout the local one for the current file name. take the remote
version and give it a new file name. what's the best way to do that?

-- 
Caleb Cushing

http://xenoterracide.blogspot.com

```

## Jeff King, 2009-03-02 04:11

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <20090302041113.GA3094@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20090302041113.GA3094%40coredump.intra.peff.net
In-Reply-To: <81bfc67a0903011616w32ebdad9ofc096f5d1fd3174a@mail.gmail.com>

```
On Sun, Mar 01, 2009 at 07:16:10PM -0500, Caleb Cushing wrote:

>  I have an unmerged file... the resolution I'd like to have is
> checkout the local one for the current file name. take the remote
> version and give it a new file name. what's the best way to do that?

I would use:

  $ git show :2:file >file
  $ git show :3:file >newfile
  $ git add file newfile

You can do the first with "git checkout --ours", but I don't think there
is a way with "checkout" to say "checkout this path, but put it in a
different place".

-Peff

```

## Charles Bailey, 2009-03-02 06:36

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <20090302063604.GA17245@hashpling.org>
URL: https://gitlist.dev/e/20090302063604.GA17245%40hashpling.org
In-Reply-To: <20090302041113.GA3094@coredump.intra.peff.net>

```
On Sun, Mar 01, 2009 at 11:11:13PM -0500, Jeff King wrote:
> On Sun, Mar 01, 2009 at 07:16:10PM -0500, Caleb Cushing wrote:
> 
> >  I have an unmerged file... the resolution I'd like to have is
> > checkout the local one for the current file name. take the remote
> > version and give it a new file name. what's the best way to do that?
> 
> I would use:
> 
>   $ git show :2:file >file
>   $ git show :3:file >newfile
>   $ git add file newfile
> 
> You can do the first with "git checkout --ours", but I don't think there
> is a way with "checkout" to say "checkout this path, but put it in a
> different place".
> 
> -Peff

You can use git checkout-index --temp --stage=3 and then move it from
the auto-generated temporary name into its new place.

The shell function checkout_staged_file in git-mergetool.sh does this
programmatically, it's not very beautiful as the output of
checkout-index --temp requires a bit of expr magic to get the
temporary file name out.

Using a checkout variant instead of a show or a cat-file might be
important if you are doing autocrlf or some other smudging.

-- 
Charles Bailey
http://ccgi.hashpling.plus.com/blog/

```

## Jeff King, 2009-03-02 06:45

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <20090302064519.GA5635@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20090302064519.GA5635%40coredump.intra.peff.net
In-Reply-To: <20090302063604.GA17245@hashpling.org>

```
On Mon, Mar 02, 2009 at 06:36:04AM +0000, Charles Bailey wrote:

> You can use git checkout-index --temp --stage=3 and then move it from
> the auto-generated temporary name into its new place.

Hmm. I was hoping there was something that would use the name "--theirs"
instead of the mysterious "stage level 3". But it's still nicer than the
"git show" I gave because of:

> Using a checkout variant instead of a show or a cat-file might be
> important if you are doing autocrlf or some other smudging.

Right. For some reason I was thinking that cat-file did not handle this
but "git show" did, but I just tested and it clearly doesn't. So yes,
you should definitely use checkout-index if you care about conversions.

-Peff

```

## Björn Steinbrink, 2009-03-02 06:59

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <20090302065949.GD6289@atjola.homenet>
URL: https://gitlist.dev/e/20090302065949.GD6289%40atjola.homenet
In-Reply-To: <20090302064519.GA5635@coredump.intra.peff.net>

```
On 2009.03.02 01:45:19 -0500, Jeff King wrote:
> On Mon, Mar 02, 2009 at 06:36:04AM +0000, Charles Bailey wrote:
> 
> > You can use git checkout-index --temp --stage=3 and then move it from
> > the auto-generated temporary name into its new place.
> 
> Hmm. I was hoping there was something that would use the name "--theirs"
> instead of the mysterious "stage level 3". But it's still nicer than the
> "git show" I gave because of:
> 
> > Using a checkout variant instead of a show or a cat-file might be
> > important if you are doing autocrlf or some other smudging.
> 
> Right. For some reason I was thinking that cat-file did not handle this
> but "git show" did, but I just tested and it clearly doesn't. So yes,
> you should definitely use checkout-index if you care about conversions.

Hm, how about this?
git checkout --theirs file
git mv file newname
git checkout HEAD file # Can't use --ours here due to the mv

Should work with the CRLF stuff, uses no plumbing, no stage numbers,
there's no messing with random temp file names and it's still just three
commands.

Björn

```

## Jeff King, 2009-03-02 07:04

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <20090302070406.GA12937@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20090302070406.GA12937%40coredump.intra.peff.net
In-Reply-To: <20090302065949.GD6289@atjola.homenet>

```
On Mon, Mar 02, 2009 at 07:59:49AM +0100, Björn Steinbrink wrote:

> Hm, how about this?
> git checkout --theirs file
> git mv file newname
> git checkout HEAD file # Can't use --ours here due to the mv

Actually, you can use --ours if you don't "git mv":

  git checkout --theirs file
  mv file newfile
  git checkout --ours file
  git add file newfile

One more command, but I think more obvious about what is going on (and I
think both are better than the other suggestions).

-Peff

```

## Jay Soffian, 2009-03-02 13:05

Subject: Re: merge, keeping the remote as a new file?
Message-ID: <76718490903020505j4c4f2df2i379632158f1c80bf@mail.gmail.com>
URL: https://gitlist.dev/e/76718490903020505j4c4f2df2i379632158f1c80bf%40mail.gmail.com
In-Reply-To: <20090302070406.GA12937@coredump.intra.peff.net>

```
On Mon, Mar 2, 2009 at 2:04 AM, Jeff King <peff@peff.net> wrote:
> On Mon, Mar 02, 2009 at 07:59:49AM +0100, Björn Steinbrink wrote:
>
>> Hm, how about this?
>> git checkout --theirs file
>> git mv file newname
>> git checkout HEAD file # Can't use --ours here due to the mv
>
> Actually, you can use --ours if you don't "git mv":
>
>  git checkout --theirs file
>  mv file newfile
>  git checkout --ours file
>  git add file newfile
>
> One more command, but I think more obvious about what is going on (and I
> think both are better than the other suggestions).

This is a superior answer as well because it avoids plumbing in a
situation where plumbing ought not be needed.

j.

```
