How to Create a Git Repository & Push With a Single Command

I’m a junior dev, my instinct hasn’t evolved to impulsively think to git init when i’m starting something new or collaborating on a project locally. I find myself forgetting to track changes until I‘ve spent a few hours and think ‘oh, I should really track/save this’.

This is bad practice and I need to make a concerted effort to do better.

So, i’m writing this article to remind myself, and anyone that relates, to git init sooner AND to pickup and study Github’s Command Line Interface. Github’s CLI makes creating project repos a breeze, plus you can do everything from the command line, no browser needed.

Prerequisites

Initialising a local repo

Lets assume you have project files in a folder saved locally but you haven’t initialised git. Here are the steps to take:

  • Open a new terminal by typing ‘terminal’ into spotlight on mac (CMD + Space) or Windows key + R on windows
  • Navigate into the root of your project directory with cd directory-name
  • Add a git ignore file with the command touch .gitignore
  • Add lines to filter out things Github doesn’t need to see in your .gitignore file e.g .DS_store& node_modules
  • Initialise your local repo with git init
  • Stage your local repo with git add . to add all your files
  • Commit your files with git commit -m “initial commit, I did a thing..."

Creating a remote repo and pushing your code

Ok, you’re ready to push your committed work into Github. At this stage you could load up a browser, navigate to Github, click around lots to create a repo, copy the command to push remotely and paste it in your command line 😅

OR you could use a one liner right from your terminal to do all that for you in one go with the Github CLI:

gh repo create my-newrepo --public --source=. --remote=upstream --push

Before you can use this one liner, you may be asked to authenticate your Github credentials which you do quickly with the command:gh auth login. You’ll only have to do this once and the authentication process is interactive right from the command line.

Breaking down the command

  • The first part of the one liner: gh repo create my-newrepo creates and names a repo in your account (note: ‘my-newrepo’ should be replaced by the repo name of your choice)
  • The -public flag makes sure the repo is public (swap this for -private if necessary)
  • The -source=. flag specifies the source directory to be pushed
  • Finally, the -remote=upstream flag specifies the remote repository to which the local repository is going to be compared with when pushing i.e the ‘upstream’ default.

Here’s each step in full

For the commands inputted, follow the lines that start with a tilde ‘~’. Every other line is generated by the Git or Github CLI:

~ % cd project-directory ~ project-directory % touch .gitignore ~ project-directory % git init Initialized empty Git repository in /Users/adam/Desktop/project-directory/.git/ ~ project-directory % git add . ~ project-directory % git commit -m "Initial commit" [main (root-commit) 2428d22] Initial commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore ~ project-directory % gh repo create my-newrepo --public --source=. --remote=upstream --push ✓ Created repository adamddurrant/my-newrepo on GitHub ✓ Added remote https://github.com/adamddurrant/my-newrepo.git Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 215 bytes | 107.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To https://github.com/adamddurrant/my-newrepo.git * [new branch] HEAD -> main branch 'main' set up to track 'upstream/main'. ✓ Pushed commits to https://github.com/adamddurrant/my-newrepo.git

Final thoughts

Another way to avoid forgetful ways of working is not to begin work until change tracking has been initialised. Meaning you could git init right out the gate.

To do that with the CLI, you can use the following command to create, name and clone an empty repo to your local machine ready to start work:

gh repo create new-repo --public --clone

In summary, Github CLI commands are worth remembering. They’ll make you so much more efficient and your future self will thank you.