Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git copy file from another branch without staging it

Tags:

git

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?

like image 987
user151841 Avatar asked May 07 '19 19:05

user151841


2 Answers

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

git show feature-B:directory/somefile.php > directory/somefile.php
like image 77
eftshift0 Avatar answered Oct 21 '22 01:10

eftshift0


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.
like image 25
Mariusz Pawelski Avatar answered Oct 21 '22 02:10

Mariusz Pawelski