Git subtree aliases (shortcuts)
Git subtree aliases. Use these shortcuts when dealing with git subtree and avoid repetitive strain injuries 
You’ll probably want to put these shortcuts in your user’s global configuration file, typically $HOME/.gitconfig, but you can alternatively restrict them to the configuration file under a specific repository (./git/config).
Just place the following three aliases in the chosen configuration file under the alias section:
[alias]st-add = "!f() { \DEFAULT_BRANCH=master; \DEFAULT_DIR=$(basename $1 | cut -d. -f1); \git subtree add --prefix $DEFAULT_DIR $1 ${2:-$DEFAULT_BRANCH} --squash; \}; f"st-pull = "!f() { \DEFAULT_BRANCH=master; \DEFAULT_DIR=$(basename $1 | cut -d. -f1); \git subtree pull --prefix $DEFAULT_DIR $1 ${2:-$DEFAULT_BRANCH} --squash; \}; f"st-push = "!f() { \DEFAULT_BRANCH=master; \DEFAULT_DIR=$(basename $1 | cut -d. -f1); \git subtree push --prefix $DEFAULT_DIR $1 ${2:-$DEFAULT_BRANCH}; \}; f"
You can change the default branch from master to anything you wish. You can also remove the --squash option if you want to import the entire history from the subproject rather than just a single commit.
You start by adding a subproject to your main project:
$ git st-add <remote repository> <optional branch name>
Example:
$ git st-add git@github.com:my-org/my-repo.git development
This will include git@github.com:my-org/my-repo.git (development branch) as a subproject in the ./my-repo directory.
The remaining commands (st-pull and st-push) are self-explanatory and follow the same syntax.