Как получить только один файл из другой ветки

Просто для удовольствия, вот на месте версия quicksort в PHP, с которой я пришел. Трюк здесь состоит в том, чтобы передать массив, который будет отсортирован как ссылка.

function partition(&$arr,$leftIndex,$rightIndex)
{
    $pivot=$arr[($leftIndex+$rightIndex)/2];

    while ($leftIndex <= $rightIndex) 
    {        
        while ($arr[$leftIndex] < $pivot)             
                $leftIndex++;
        while ($arr[$rightIndex] > $pivot)
                $rightIndex--;
        if ($leftIndex <= $rightIndex) {  
                $tmp = $arr[$leftIndex];
                $arr[$leftIndex] = $arr[$rightIndex];
                $arr[$rightIndex] = $tmp;
                $leftIndex++;
                $rightIndex--;
        }
    }
    return $leftIndex;
}

function quickSort(&$arr, $leftIndex, $rightIndex)
{
    $index = partition($arr,$leftIndex,$rightIndex);
    if ($leftIndex < $index - 1)
        quickSort($arr, $leftIndex, $index - 1);
    if ($index < $rightIndex)
        quickSort($arr, $index, $rightIndex);
}
1078
задан 7ochem 30 March 2015 в 13:58
поделиться

1 ответ

git checkout master               # first get back to master
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

См. Также git, как отменить изменения в одном файле?


Обновление августа 2019 г., Git 2.23: с новым переключателем git и git restore команды, которые будут выглядеть так:

git switch master
git restore -s experiment -- app.js

По умолчанию восстанавливается только рабочее дерево.
Если вы хотите также обновить индекс (то есть восстановить содержимое файла, и добавьте его в индекс одной командой):

git restore -s experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -WS -- app.js

As Jakub Narębski упоминает в комментариях:

git show experiment:path/to/app.js > path/to/app.js

тоже работает, за исключением того, что, как подробно описано в вопросе SO « Как получить отдельный файл из конкретной ревизии в Git? », вам нужно использовать полную путь из корневого каталога репо.
Отсюда путь / к / app.js, который Якуб использовал в своем примере.

Как Frosty упоминает в комментарии:

вы получите только самое последнее состояние приложения.js

Но для git checkout или git show вы можете ссылаться на любую нужную ревизию, как показано в вопросе SO " git checkout ревизия файла в git gui ":

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

будет то же самое, если $ FILENAME - это полный путь версионного файла.

$ REVISION может быть таким, как показано в git rev-parse :

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

и так далее.

schmijos добавляет в комментарии :

вы также можете сделать это из тайника:

 git checkout stash - app.js 
 

Это очень полезно, если вы работаете над двумя ветвями и не хотите коммитить.

1484
ответ дан 19 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: