Download GIT commands and GIT knowledge from EaseNotes to learn more about using Git and executing Git commands.
Git is a powerful tool used for version control in software development. Whether you are a beginner just starting to learn about Git or a seasoned professional looking to enhance your skills, understanding the basics is essential.
For beginners, it's important to grasp the concept of repositories, commits, branches, and merges. Knowing how to create a new repository, make changes to files, commit those changes, and push them to a remote repository are fundamental skills that will set you on the right path.
Professionals can benefit from diving deeper into advanced Git features such as rebasing, cherry-picking, and resolving merge conflicts. These techniques can help streamline your workflow, improve collaboration with team members, and maintain a clean and organized codebase.
No matter your level of experience, continuous learning and practice are key to mastering Git. By exploring tutorials, attending workshops, and working on real-world projects, you can sharpen your Git skills and become more efficient and effective in your development work.
Chapter 1: Getting started with Git
Section 1.1: Create your first repository, then add and commit files
Section 1.2: Clone a repository
Section 1.3: Sharing code
Section 1.4: Setting your user name and email
Section 1.5: Setting up the upstream remote
Section 1.6: Learning about a command
Section 1.7: Set up SSH for Git
Section 1.8: Git Installation
Chapter 2: Browsing the history
Section 2.1: "Regular" Git Log
Section 2.2: Prettier log
Section 2.3: Colorize Logs
Section 2.4: Oneline log
Section 2.5: Log search
Section 2.6: List all contributions grouped by author name
Section 2.7: Searching commit string in git log
Section 2.8: Log for a range of lines within a file
Section 2.9: Filter logs
Section 2.10: Log with changes inline
Section 2.11: Log showing committed files
Section 2.12: Show the contents of a single commit
Section 2.13: Git Log Between Two Branches
Section 2.14: One line showing committer name and time since commit
Chapter 3: Working with Remotes
Section 3.1: Deleting a Remote Branch
Section 3.2: Changing Git Remote URL
Section 3.3: List Existing Remotes
Section 3.4: Removing Local Copies of Deleted Remote Branches
Section 3.5: Updating from Upstream Repository
Section 3.6: ls-remote
Section 3.7: Adding a New Remote Repository
Section 3.8: Set Upstream on a New Branch
Section 3.9: Getting Started
Section 3.10: Renaming a Remote
Section 3.11: Show information about a Specific Remote
Section 3.12: Set the URL for a Specific Remote
Section 3.13: Get the URL for a Specific Remote
Section 3.14: Changing a Remote Repository
Chapter 4: Staging
Section 4.1: Staging All Changes to Files
Section 4.2: Unstage a file that contains changes
Section 4.3: Add changes by hunk
Section 4.4: Interactive add
Section 4.5: Show Staged Changes
Section 4.6: Staging A Single File
Section 4.7: Stage deleted files
Chapter 5: Ignoring Files and Folders
Section 5.1: Ignoring files and directories with a .gitignore file
Section 5.2: Checking if a file is ignored
Section 5.3: Exceptions in a .gitignore file
Section 5.4: A global .gitignore file
Section 5.5: Ignore files that have already been committed to a Git repository
Section 5.6: Ignore files locally without committing ignore rules
Section 5.7: Ignoring subsequent changes to a file (without removing it)
Section 5.8: Ignoring a file in any directory
Section 5.9: Prefilled .gitignore Templates
Section 5.10: Ignoring files in subfolders (Multiple gitignore files)
Section 5.11: Create an Empty Folder
Section 5.12: Finding files ignored by .gitignore
Section 5.13: Ignoring only part of a file [stub]
Section 5.14: Ignoring changes in tracked files. [stub]
Section 5.15: Clear already committed files, but included in .gitignore
Chapter 6: Git Diff
Section 6.1: Show differences in the working branch
Section 6.2: Show changes between two commits
Section 6.3: Show differences for staged files
Section 6.4: Comparing branches
Section 6.5: Show both staged and unstaged changes
Section 6.6: Show differences for a specific file or directory
Section 6.7: Viewing a word-diff for long lines
Section 6.8: Show differences between current version and last version
Section 6.9: Produce a patch-compatible diff
Section 6.10: Difference between two commit or branch
Section 6.11: Using meld to see all modifications in the working directory
Section 6.12: Diff UTF-16 encoded text and binary plist files
Chapter 7: Undoing
Section 7.1: Return to a previous commit
Section 7.2: Undoing changes
Section 7.3: Using reflog
Section 7.4: Undoing merges
Section 7.5: Revert some existing commits
Section 7.6: Undo / Redo a series of commits
Chapter 8: Merging
Section 8.1: Automatic Merging
Section 8.2: Finding all branches with no merged changes
Section 8.3: Aborting a merge
Section 8.4: Merge with a commit
Section 8.5: Keep changes from only one side of a merge
Section 8.6: Merge one branch into another
Chapter 9: Submodules
Section 9.1: Cloning a Git repository having submodules
Section 9.2: Updating a Submodule
Section 9.3: Adding a submodule
Section 9.4: Setting a submodule to follow a branch
Section 9.5: Moving a submodule
Chapter 10: Committing
Section 10.1: Stage and commit changes
Section 10.2: Good commit messages
Section 10.3: Amending a commit
Section 10.4: Committing without opening an editor
Section 10.5: Committing changes directly
Section 10.6: Selecting which lines should be staged for committing
Section 10.7: Creating an empty commit
Section 10.8: Committing on behalf of someone else
Section 10.9: GPG signing commits
Section 10.10: Committing changes in specific files
Section 10.11: Committing at a specific date
Section 10.12: Amending the time of a commit
Section 10.13: Amending the author of a commit
Chapter 11: Aliases
Section 11.1: Simple aliases
Section 11.2: List / search existing aliases
Section 11.3: Advanced Aliases
Section 11.4: Temporarily ignore tracked files
Section 11.5: Show pretty log with branch graph
Section 11.6: See which files are being ignored by your .gitignore configuration
Section 11.7: Updating code while keeping a linear history
Section 11.8: Unstage staged files
Chapter 12: Rebasing
Section 12.1: Local Branch Rebasing
Section 12.2: Rebase: ours and theirs, local and remote
Section 12.3: Interactive Rebase
Section 12.4: Rebase down to the initial commit
Section 12.5: Configuring autostash
Section 12.6: Testing all commits during rebase
Section 12.7: Rebasing before a code review
Section 12.8: Aborting an Interactive Rebase
Section 12.9: Setup git-pull for automatically perform a rebase instead of a merge
Section 12.10: Pushing after a rebase
Chapter 13: Configuration
Section 13.1: Setting which editor to use
Section 13.2: Auto correct typos
Section 13.3: List and edit the current configuration
Section 13.4: Username and email address
Section 13.5: Multiple usernames and email addresses
Section 13.6: Multiple git configurations
Section 13.7: Configuring line endings
Section 13.8: Configuration for one command only
Section 13.9: Setup a proxy
Chapter 14: Branching
Section 14.1: Creating and checking out new branches
Section 14.2: Listing branches
Section 14.3: Delete a remote branch
Section 14.4: Quick switch to the previous branch
Section 14.5: Check out a new branch tracking a remote branch
Section 14.6: Delete a branch locally
Section 14.7: Create an orphan branch (i.e. branch with no parent commit)
Section 14.8: Rename a branch
Section 14.9: Searching in branches
Section 14.10: Push branch to remote
Section 14.11: Move current branch HEAD to an arbitrary commit
Chapter 15: Rev-List
Section 15.1: List Commits in master but not in origin/master
Chapter 16: Squashing
Section 16.1: Squash Recent Commits Without Rebasing
Section 16.2: Squashing Commit During Merge
Section 16.3: Squashing Commits During a Rebase
Section 16.4: Autosquashing and fixups
Section 16.5: Autosquash: Committing code you want to squash during a rebase
Chapter 17: Cherry Picking
Section 17.1: Copying a commit from one branch to another
Section 17.2: Copying a range of commits from one branch to another
Section 17.3: Checking if a cherry-pick is required
Section 17.4: Find commits yet to be applied to upstream
Chapter 18: Recovering
Section 18.1: Recovering from a reset
Section 18.2: Recover from git stash
Section 18.3: Recovering from a lost commit
Section 18.4: Restore a deleted file after a commit
Section 18.5: Restore file to a previous version
Section 18.6: Recover a deleted branch
Chapter 19: Git Clean
Section 19.1: Clean Interactively
Section 19.2: Forcefully remove untracked files
Section 19.3: Clean Ignored Files
Section 19.4: Clean All Untracked Directories
Chapter 20: Using a .gitattributes file
Section 20.1: Automatic Line Ending Normalization
Section 20.2: Identify Binary Files
Section 20.3: Prefilled .gitattribute Templates
Section 20.4: Disable Line Ending Normalization
Chapter 21: .mailmap file: Associating contributor and email aliases
Section 21.1: Merge contributors by aliases to show commit count in shortlog
Chapter 22: Analyzing types of workflows
Section 22.1: Centralized Workflow
Section 22.2: Gitflow Workflow
Section 22.3: Feature Branch Workflow
Section 22.4: GitHub Flow
Section 22.5: Forking Workflow
Chapter 23: Pulling
Section 23.1: Pulling changes to a local repository
Section 23.2: Updating with local changes
Section 23.3: Pull, overwrite local
Section 23.4: Pull code from remote
Section 23.5: Keeping linear history when pulling
Section 23.6: Pull, "permission denied"
Chapter 24: Hooks
Section 24.1: Pre-push
Section 24.2: Verify Maven build (or other build system) before committing
Section 24.3: Automatically forward certain pushes to other repositories
Section 24.4: Commit-msg
Section 24.5: Local hooks
Section 24.6: Post-checkout
Section 24.7: Post-commit
Section 24.8: Post-receive
Section 24.9: Pre-commit
Section 24.10: Prepare-commit-msg
Section 24.11: Pre-rebase
Section 24.12: Pre-receive
Section 24.13: Update
Chapter 25: Cloning Repositories
Section 25.1: Shallow Clone
Section 25.2: Regular Clone
Section 25.3: Clone a specific branch
Section 25.4: Clone recursively
Section 25.5: Clone using a proxy
Chapter 26: Stashing
Section 26.1: What is Stashing?
Section 26.2: Create stash
Section 26.3: Apply and remove stash
Section 26.4: Apply stash without removing it
Section 26.5: Show stash
Section 26.6: Partial stash
Section 26.7: List saved stashes
Section 26.8: Move your work in progress to another branch
Section 26.9: Remove stash
Section 26.10: Apply part of a stash with checkout
Section 26.11: Recovering earlier changes from stash
Section 26.12: Interactive Stashing
Section 26.13: Recover a dropped stash
Chapter 27: Subtrees
Section 27.1: Create, Pull, and Backport Subtree
Chapter 28: Renaming
Section 28.1: Rename Folders
Section 28.2: Rename a local and the remote branch
Section 28.3: Renaming a local branch
Chapter 29: Pushing
Section 29.1: Push a specific object to a remote branch
Section 29.2: Push
Section 29.3: Force Pushing
Section 29.4: Push tags
Section 29.5: Changing the default push behavior
Chapter 30: Internals
Section 30.1: Repo
Section 30.2: Objects
Section 30.3: HEAD ref
Section 30.4: Refs
Section 30.5: Commit Object
Section 30.6: Tree Object
Section 30.7: Blob Object
Section 30.8: Creating new Commits
Section 30.9: Moving HEAD
Section 30.10: Moving refs around
Section 30.11: Creating new Refs
Chapter 31: git-tfs
Section 31.1: git-tfs clone
Section 31.2: git-tfs clone from a bare git repository
Section 31.3: git-tfs install via Chocolatey
Section 31.4: git-tfs Check In
Section 31.5: git-tfs push
Chapter 32: Empty directories in Git
Section 32.1: Git doesn't track directories
Chapter 33: git-svn
Section 33.1: Cloning the SVN repository
Section 33.2: Pushing local changes to SVN
Section 33.3: Working locally
Section 33.4: Getting the latest changes from SVN
Section 33.5: Handling empty folders
Chapter 34: Archive
Section 34.1: Create an archive of the git repository
Section 34.2: Create an archive of the git repository with a directory prefix
Section 34.3: Create an archive of the git repository based on a specific branch, revision, tag, or directory
Chapter 35: Rewriting history with filter-branch
Section 35.1: Changing the author of commits
Section 35.2: Setting git committer equal to commit author
Chapter 36: Migrating to Git
Section 36.1: SubGit
Section 36.2: Migrate from SVN to Git using Atlassian conversion utility
Section 36.3: Migrating Mercurial to Git
Section 36.4: Migrate from Team Foundation Version Control (TFVC) to Git
Section 36.5: Migrate from SVN to Git using svn2git
Chapter 37: Show
Section 37.1: Overview
Chapter 38: Resolving merge conflicts
Section 38.1: Manual Resolution
Chapter 39: Bundles
Section 39.1: Creating a git bundle on the local machine and using it on another
Chapter 40: Display commit history graphically with Gitk
Section 40.1: Display commit history for one file
Section 40.2: Display all commits between two commits
Section 40.3: Display commits since the version tag
Chapter 41: Bisecting/Finding faulty commits
Section 41.1: Binary search (git bisect)
Section 41.2: Semi-automatically find a faulty commit
Chapter 42: Blaming
Section 42.1: Only show certain lines
Section 42.2: To find out who changed a file
Section 42.3: Show the commit that last modified a line
Section 42.4: Ignore whitespace-only changes
Chapter 43: Git revisions syntax
Section 43.1: Specifying revision by object name
Section 43.2: Symbolic ref names: branches, tags, remote-tracking branches
Section 43.3: The default revision: HEAD
Section 43.4: Reflog references: <refname>@{<n>}
Section 43.5: Reflog references: <refname>@{<date>}
Section 43.6: Tracked/upstream branch: <branchname>@{upstream}
Section 43.7: Commit ancestry chain: <rev>^, <rev>~<n>, etc
Section 43.8: Dereferencing branches and tags: <rev>^0, <rev>^{<type>}
Section 43.9: Youngest matching commit: <rev>^{/<text>}, :/<text>
Chapter 44: Worktrees
Section 44.1: Using a worktree
Section 44.2: Moving a worktree
Chapter 45: Git Remote
Section 45.1: Display Remote Repositories
Section 45.2: Change remote URL of your Git repository
Section 45.3: Remove a Remote Repository
Section 45.4: Add a Remote Repository
Section 45.5: Show more information about the remote repository
Section 45.6: Rename a Remote Repository
Chapter 46: Git Large File Storage (LFS)
Section 46.1: Declare certain file types to store externally
Section 46.2: Set LFS config for all clones
Section 46.3: Install LFS
Chapter 47: Git Patch
Section 47.1: Creating a patch
Section 47.2: Applying patches
Chapter 48: Git statistics
Section 48.1: Lines of code per developer
Section 48.2: Listing each branch and its last revision's date
Section 48.3: Commits per developer
Section 48.4: Commits per date
Section 48.5: Total number of commits in a branch
Section 48.6: List all commits in pretty format
Section 48.7: Find All Local Git Repositories on Computer
Section 48.8: Show the total number of commits per author
Chapter 49: git send-email
Section 49.1: Use git send-email with Gmail
Section 49.2: Composing
Section 49.3: Sending patches by mail
Chapter 50: Git GUI Clients
Section 50.1: gitk and git-gui
Section 50.2: GitHub Desktop
Section 50.3: Git Kraken
Section 50.4: SourceTree
Section 50.5: Git Extensions
Section 50.6: SmartGit
Chapter 51: Reflog - Restoring commits not shown in git log
Section 51.1: Recovering from a bad rebase
Chapter 52: TortoiseGit
Section 52.1: Squash commits
Section 52.2: Assume unchanged
Section 52.3: Ignoring Files and Folders
Section 52.4: Branching
Chapter 53: External merge and diff tools
Section 53.1: Setting up KDiff3 as a merge tool
Section 53.2: Setting up KDiff3 as a diff tool
Section 53.3: Setting up an IntelliJ IDE as a merge tool (Windows)
Section 53.4: Setting up an IntelliJ IDE as a diff tool (Windows)
Section 53.5: Setting up Beyond Compare
Chapter 54: Update Object Name in Reference
Section 54.1: Update Object Name in Reference
Chapter 55: Git Branch Name on Bash Ubuntu
Section 55.1: Branch Name in the terminal
Chapter 56: Git Client-Side Hooks
Section 56.1: Git pre-push hook
Section 56.2: Installing a Hook
Chapter 57: Git rerere
Section 57.1: Enabling rerere
Chapter 58: Change git repository name
Section 58.1: Change local setting
Chapter 59: Git Tagging
Section 59.1: Listing all available tags
Section 59.2: Create and push tag(s) in GIT
Chapter 60: Tidying up your local and remote repository
Section 60.1: Delete local branches that have been deleted on the remote
Chapter 61: difftree
Section 61.1: See the files changed in a specific commit
Section 61.2: Usage
Section 61.3: Common diff-tree options