Просто для удовольствия, вот на месте версия 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);
}
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
Это очень полезно, если вы работаете над двумя ветвями и не хотите коммитить.