setRepository('/path/to/repo'); * $git->stash(); * ``` * * @return bool */ public function __invoke() { $builder = $this->git->getProcessBuilder() ->add('stash'); $this->git->run($builder->getProcess()); return true; } /** * Save your local modifications to a new stash, and run git reset --hard to revert them. * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->save('My stash'); * ``` * * @param string $message [optional] The description along with the stashed state * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions} * * @return bool */ public function save($message = null, array $options = array()) { $options = $this->resolve($options); $builder = $this->git->getProcessBuilder() ->add('stash') ->add('save'); $builder->add($message); $this->git->run($builder->getProcess()); return true; } /** * Returns the stashes that you currently have * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $stashes = $git->stash->lists(); * ``` * * ##### Output Example * * ``` php * [ * 0 => ['branch' => 'master', 'message' => '0e2f473 Fixes README.md'], * 1 => ['branch' => 'master', 'message' => 'ce1ddde Initial commit'], * ] * ``` * * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions} * * @return array */ public function lists(array $options = array()) { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('list'); $output = $this->git->run($builder->getProcess()); $lines = $this->split($output); $list = array(); foreach ($lines as $line) { if (preg_match('/stash@{(\d+)}:.* [Oo]n (.*): (.*)/', $line, $matches)) { $list[$matches[1]] = array( 'branch' => $matches[2], 'message' => $matches[3] ); } } return $list; } /** * Show the changes recorded in the stash as a diff between the stashed state and its original parent * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * echo $git->stash->show('stash@{0}'); * ``` * * ##### Output Example * * ``` * REAMDE.md | 2 +- * 1 files changed, 1 insertions(+), 1 deletions(-) * ``` * * @param string $stash The stash to show * * @return string */ public function show($stash = null) { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('show'); if ($stash) { $builder->add($stash); } return $this->git->run($builder->getProcess()); } /** * Remove a single stashed state from the stash list * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->drop('stash@{0}'); * ``` * * @param string $stash The stash to drop * * @return mixed */ public function drop($stash = null) { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('drop'); if ($stash) { $builder->add($stash); } return $this->git->run($builder->getProcess()); } /** * Remove a single stashed state from the stash list and apply it on top of the current working tree state * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->pop('stash@{0}'); * ``` * * @param string $stash The stash to pop * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions} * * @return bool */ public function pop($stash = null, array $options = array()) { $options = $this->resolve($options); $builder = $this->git->getProcessBuilder() ->add('stash') ->add('pop'); $this->addFlags($builder, $options, array('index')); if ($stash) { $builder->add($stash); } $this->git->run($builder->getProcess()); return true; } /** * Like pop, but do not remove the state from the stash list * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->apply('stash@{0}'); * ``` * * @param string $stash The stash to apply * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions} * * @return bool */ public function apply($stash = null, array $options = array()) { $options = $this->resolve($options); $builder = $this->git->getProcessBuilder() ->add('stash') ->add('apply'); $this->addFlags($builder, $options, array('index')); if ($stash) { $builder->add($stash); } $this->git->run($builder->getProcess()); return true; } /** * Creates and checks out a new branch named starting from the commit at which the was originally created, applies the changes recorded in to the new working tree and index * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->branch('hotfix', 'stash@{0}'); * ``` * * @param string $name The name of the branch * @param string $stash The stash * * @return bool */ public function branch($name, $stash = null) { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('branch') ->add($name); if ($stash) { $builder->add($stash); } $this->git->run($builder->getProcess()); return true; } /** * Remove all the stashed states * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $git->stash->clear(); * ``` * * @return bool */ public function clear() { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('clear'); $this->git->run($builder->getProcess()); return true; } /** * Create a stash (which is a regular commit object) and return its object name, without storing it anywhere in the ref namespace * * ``` php * $git = new PHPGit\Git(); * $git->setRepository('/path/to/repo'); * $commit = $git->stash->create(); * ``` * * ##### Output Example * * ``` * 877316ea6f95c43b7ccc2c2a362eeedfa78b597d * ``` * * @return string */ public function create() { $builder = $this->git->getProcessBuilder() ->add('stash') ->add('create'); return $this->git->run($builder->getProcess()); } }