learnGit.sh

  • Open a terminal then type these to learn about git, use enter on the keyboard after every line to see results as you type along, errors are expected

    ##########################################################################
    #                             How to use Git                             #
    ##########################################################################
    
    git help
    git help --all
    q
    git help --guides
    git help attributes
    q
    git help everyday
    q
    git help glossary
    q
    git help ignore
    q
    git help modules
    q
    git help revisions
    q
    git help tutorial
    q
    git help workflows
    q
    git help init
    q
    git init --help
    q
    git help add
    q
    git add --help
    q
    git help commit
    q
    git commit --help
    q
    git help status
    q
    git status --help
    clear
    
    PROJECTNAME=Name of Project
    
    ###############################################################
    #                  Create A New Repository                    #
    # go to https://github.com > Start A Project > $PROJECTNAME   #
    # Click Create repository                                     #
    ###############################################################
    
    mkdir $PROJECTNAME && cd $PROJECTNAME
    echo "# $PROJECTNAME" >> README.md
    
    git init                # mkdir .git and add important files
    git status
    git diff
    git diff --cached
    git diff HEAD
    git commit --all --message "I cannot commit since I have not told git to track anything yet"
    git log
    git log --oneline
    git log --merges
    git log --graph
    
    git add README.md
    git commit --all --message "made my first commit"
    ls
    cd .git
    tree
    cat description
    nano description
    $PROJECTNAME; a Git Repository
    # hit ctrl+x on the keyboard
    Y
    cat description
    cd ..
    clear
    
    git remote add origin git@github.com:$GITHUB_USERNAME/$PROJECTNAME.git
    
    git remote --verbose
    git push --set-upstream origin main
    clear
    
    ###############################################################
    #          Keeping Files And Directories Private              #
    ###############################################################
    
    cat .gitignore
    ls -a
    ls
    mkdir DirectoryNotToBeShared
    ls
    echo "DirectoryNotToBeShared/" >> .gitignore
    cat .gitignore
    ls -a
    touch FileNotToBeShared.extension
    echo "FileNotToBeShared.extension" >> .gitignore
    cat .gitignore
    ls
    ls -a
    git status
    git add .gitignore
    git diff
    git diff --cached
    git diff HEAD
    git commit --all --message "created files and directories for git to not track"
    git log
    git log --oneline
    git log --merges
    git log --graph
    git status
    git add DirectoryNotToBeShared/
    git add FileNotToBeShared.extension
    git status
    git push
    git status
    git log
    git log --oneline
    git log --merges
    git log --graph
    clear
    
    # Managing Files and Directories
    touch File{1,2,3,N}InThisDirectory.extension
    ls
    tree
    mkdir Directory{1,2,3,N}
    ls
    
    ##########################################################################################################
    #                                                                                                        #
    #   Are you on using MacOS - install brew with this command                                              #
    #      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"   #
    #   install tree with this command                                                                       #
    #      brew install tree                                                                                 #
    #                                                                                                        #
    #   Are you on a Linux Machine or using WSL?                                                             #
    #      sudo apt install tree                                                                             #
    #                                                                                                        #
    ##########################################################################################################
    
    tree
    touch Directory{1,2,3,N}/File{1,2,3,N}InThisDirectory.extension
    ls
    tree
    touch Directory2/python_file.py
    touch Directory2/java_file.java
    touch Directory2/java_file.war
    touch Directory3/html_file.html
    touch Directory3/javscriptFile.js
    touch DirectoryN/compressed_file.zip
    touch DirectoryN/compressed_file.bz2
    touch DirectoryN/compressed_file.xz
    touch DirectoryN/tape_archive_file.tar
    tree
    cd Directory3
    pwd
    mkdir ChildOfDirectory3
    cd ChildOfDirectory3
    mkdir ChildOfChildOfDirectory3
    cd ChildOfChildOfDirectory3
    pwd
    touch textfile{1,2,3,N}.txt
    ls
    tree
    cd ../..
    pwd
    ls
    tree
    cd ..
    ls
    tree
    clear
    
    ###############################################################
    #    How to add Files and Directories for Git to Track        #
    ###############################################################
    
    tree
    git status
    nano File1InThisDirectory.extension
    I am modifying File1InThisDirectory.extension in $PROJECTNAME
    # hit ctrl+x on the keyboard
    y
    git add File1InThisDirectory.extension
    git status
    git commit --all --message "I modified File1InThisDirectory.extension in $PROJECTNAME"
    git push
    git status
    
    nano Directory1/FileInThisDirectory.extension
    I am modifying File1InThisDirectory.extension in Directory1
    # hit ctrl+x on the keyboard
    y
    git add Directory1/File1InThisDirectory.extension
    git addDirectory1/FileNInThisDirectory.extension
    git commit --all --message "I modified File1InThisDirectory.extension in Directory1"
    git status
    git push
    git status
    
    git add Directory2/File2InThisDirectory.extension
    nano Directory2/File2InThisDirectory.extension
    What happens if I modify a file after adding it to tracking?
    # hit ctrl+x on the keyboard
    y
    git commit --all --message "I modified File2InThisDirectory.extension in Directory2"
    git status
    git add Directory2/File2InThisDirectory.extension
    git status
    git commit -am "I Modified File2InThisDirectory.extension in Directory2"
    git status
    git push
    git status
    
    nano Directory3/File3InThisDirectory.extension
    I Always add after modifying a file and commit
    # hit ctrl+x on the keyboard
    y
    git add Directory3/File3InThisDirectory.extension
    git commit --all --message "I modified File3InThisDirectory.extension in Directory3"
    git push
    git status
    git add Directory3/
    
    git status
    nano DirectoryN/FileNInThisDirectory.extension
    I will ALWAYS BE COMMITTING
    # hit ctrl+x on the keyboard
    y
    git add DirectoryN/FileNInThisDirectory.extension
    git commit --all --message "I modified FileNInThisDirectory.extension in DirectoryN"
    git push
    
    git status
    git add .
    git status
    tree
    git diff
    git diff --cached
    q
    git diff HEAD
    q
    git commit -am "I added new Ffives to be tracked by git"
    git log
    q
    git log --oneline
    git log --graph
    q
    git commit -amend --message "I Added new Files and Directories in $PROJECTNAME for git to track"
    git log
    q
    git log --oneline
    git log --merges
    git log --graph
    q
    git push
    git log --oneline
    git log --merges
    git log --graph
    git diff
    git status
    clear
    
    ###############################################################
    #                           Branching                         #
    ###############################################################
    
    git status
    git branch
    git branch --all
    git branch --verbose
    git branch -vv
    git branch a_new_branch
    git branch
    git branch --delete a_new_branch
    git branch
    git branch an_old_branch_name
    git branch --all
    git branch --merge an_old_branch_name a_new_branch_name
    git branch --all
    git branch --verbose
    git branch -vv
    
    git branch a_branch
    git branch --all
    git checkout a_branch
    git branch --all
    git status
    git checkout main
    git status
    git branch --all
    git checkout a_new_branch_name
    git branch --all
    git status
    git checkout -b a_new_branch
    git branch --all
    git status
    git checkout main
    git checkout -b a_dead_branch
    git branch --all
    git status
    git checkout main
    git branch --delete --force a_dead_branch
    git branch --all
    git status
    ls
    tree
    
    git branch --all
    git branch branch1
    git branch branch2
    git branch branch3
    git branch branchN
    git branch --all
    
    git push origin a_branch
    git branch --all
    git push origin a_new_branch
    git branch --all
    git push origin branch1
    git branch --all
    git push origin branch2
    git branch --all
    git push origin branch3
    git branch --all
    git push origin branchN
    git branch --all
    
    ###############################################################
    #                       Merging Changes                       #
    ###############################################################
    
    git checkout a_branch
    touch file_from_a_branch.extension
    mkdir new_directory_from_a_branch
    touch new_directory_from_a_branch/File{1,2,3,N}InThisDirectory.extension
    git status
    git add .
    git commit --all --message "I added a new File and Directory in a_branch"
    git diff origin/a_branch
    git push origin a_branch
    git diff
    git diff main
    git checkout main
    git diff origin/main
    git diff a_branch
    git merge a_branch
    git diff
    git diff a_branch
    git diff origin/main
    git status
    git push origin main
    git status
    
    git checkout -b new_feature
    git branch --all
    git diff main
    git merge main
    nano FileInThisDirectory.extension
    I had a Genius Idea and tested it in new_feature
    # hit ctrl+x on the keyboard
    y
    git status
    git add .
    git commit -am "I had a Genius Idea and tested it in new_feature"
    git diff main
    git diff remotes/origin/new_feature
    git push origin new_feature
    git checkout main
    git merge --no-ff new_feature
    I Had a Genius idea, tested it in new_feature and merged it into main
    # save and exit
    git diff
    git diff new_feature
    git diff remotes/origin/main
    git status
    git push origin main
    git log
    git log --oneline
    git log --merges
    git log graph
    git branch --delete --force new_feature
    clear
    
    ###############################################################
    #                               Tagging                       #
    ###############################################################
    
    git tag
    git tag --annotate v0.1 "Beta Test version 1"
    git tag
    git tag --annotate v0.1 -m "Beta Test version 1"
    git tag
    git tag --annotate v1.1 -m "Version 1.0 revision 1"
    git tag
    git tag v2.0 --message "Version 2.0"
    git tag
    git tag vN.M --message "Version N revision M"
    git tag
    git tag any_tag --message "Description/Comment for the Tag"
    git status
    clear
    
    git show
    git show v0.1
    git show v1.1
    git show v2.0
    git show vN.M
    git show any_tag
    git show non_existent_tag
    clear
    
    git push origin v0.1
    git push origin vN.M
    git push origin --tags
    
    git log
    git log --oneline
    git log --merges
    git log --graph