user151841
user151841

Reputation: 18046

Git copy file from another branch without staging it

I've found how you can copy a file wholesale from one branch to another:

Edit please note, if you think this question is a duplicate of this, please observe that that's the question I linked above^^, and what follows below explains the different functionality that I want.

$ git checkout directory/somefile.php feature-B

However this solution stages the changes already:

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

But I don't want to add all the changes. I want to do an add -p and take most, but not all, of the changes. What I want is this:

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")

Of course, I can do git reset to unstage the changes, but I would like to get what I want the first time, without a second step.

How can I copy a file from another branch without staging it?

Upvotes: 12

Views: 3451

Answers (2)

Mariusz Pawelski
Mariusz Pawelski

Reputation: 28832

You can use git restore

git restore --source feature-B directory/somefile.php

I didn't pass any option saying where it should restore the file and by befault it's working directory (without index/staging area). From documentation:

> -W
> --worktree
> -S
> --staged
> 
>     Specify the restore location. If neither option is specified, by default the working tree is restored. Specifying --staged will only restore the index. Specifying both restores both.

I wrote a bit more about the differences between git restore and other commands (git checkout, git show) in this answer.

Upvotes: 19

eftshift0
eftshift0

Reputation: 30204

you could use git show and then redirect... it's not very elegant, though

git show feature-B:directory/somefile.php > directory/somefile.php

Upvotes: 13

Related Questions