First thing first. Create an account and log in to GitHub [Link].

Enter Settings > SSH and GPG Keys > Add SSH Key.

Give a meaningful name and paste your SSH Public Key.

Create a New Repository. It can be public or private.

It is always good to Add a README.md file.

Add description and instructions about this repo in the README.md file and Save.

Then click on DOWNLOAD CODE, select SSH, and copy the URL:

On your Linux terminal, where you have the Private Key that matches with the uploaded Public Key issue the command to download the repository.

git clone [email protected]:user/private.git

Pulling changes from remote to local:

git pull
git pull --verbose

It is important to give Git your identification in order to be able to make changes to your repositories:

git config --global user.email "Your E-Mail"
git config --global user.name "Your Name"
cat ~/.gitconfig

Or for setting user configuration to a repository only:

git config user.email "Your E-Mail"
git config user.name "Your Name"

Modify the text in the README.md file you pulled from the repository and Save.

Check the status of the online repository against the local pulled repository:

git status

Output:

...
modified: README.md
...

Check what is different by issuing:

git diff
git diff --staged
git diff --staged README.md
git diff --cached README.md 
git diff file1.txt file2.txt
git diff COMMIT1-ID COMMIT2-ID
git --no-pager diff COMMIT1-ID COMMIT2-ID

Commit and push the modification to the online repository:

git add README.md
git commit -m "message about the update"
git commit --amend -m "Updating message for the previous commit"
git add anotherFile.txt
git commit --amend --no-edit
git push

Remove one file or all files from the stage:

git reset README.md
git reset

Check if the updates were done on GitHub.

To create a repository locally first create a folder and change into it:

git init
git remote add origin [email protected]:user/private2.git
git remote -v
git push -u origin master
git push -u origin branchName

Check what branch you are in:

git branch

List all branches including remote ones:

git branch -a

Create a branch.

git branch firstBranch

Create a branch and switch to it:

git checkout -b firstBranch

To make the first push to the new branch issue:

git push --set-upstream origin firstBranch

Note: –set-upstream is the same as -u used previously.

Eventually, to delete the beach locally (safe way):

git branch -d firstBranch

Force deleting a local branch and losing all changes of the branch:

git branch -D frstBranch

Pushing the branch deletion to remote:

git push origin --delete firstBranch

Show the differences between the current branch to another.

git diff firstBranch

Then merge the branch’s final version to the master:

git merge firstBranch

Switch to another branch.

git checkout master

Renaming or moving files:

git mv fileName.txt fileNewName.txt
git mv dir1/fileName dir2/

To list all of the commits:

git log
git log -p
git log --all --graph --oneline --decorate

View one specific commit:

git show b82ed4bb1a7dbe3ce291af17e73721dbe0c40011
git show b82ed4

Discard not committed changes to a file:

git checkout -- fileName

Revert last changes (creates a new commit to invert changes):

git revert HEAD

Undo last changes:

git reset HEAD

To revert the changes of a specific commit:

git reset 79645cdce5ef42595fee98306b9644c93f098e55

Or

git reset --hard 79645cdce5ef42595fee98306b9644c93f098e55

Put all your changes aside to work on another issue in the original code:

git stash

List all code changes you have stashed:

git stash list

Show what is in the stash:

git stash show

To get back the changes put aside:

git stash apply

Search for string through all history of commits:

git log -S 'text' --source --all

Searching with a regular expression:

git log -G "regex expression" --source --all

Squash all commits in one (use with caution):

git rebase --root -i

BONUS

Use Sandfly’s SSH Hunter to audit SSH keys. Unfortunately, it is not open source but this agent-less tool might give precious information to visualize what the keys present in the system and how they are being used (or misused), orphan, or unauthorized keys [Link].

Create your own Private Git Server [Link].