DEV Community

Sospeter Mong'are
Sospeter Mong'are

Posted on

How to Check for Uncommitted or Unpushed Changes in Git

When working on a project, it's easy to lose track of which files you've modified, staged, or committed. If you're using Git for version control, you might wonder: Have I committed all my changes? Did I push everything to the remote repository? Fortunately, Git provides several commands to help you track your changes and ensure nothing is left behind.

In this article, I'll walk you through how to check for:

  1. Unstaged changes (modified files not yet staged for commit).
  2. Staged but uncommitted changes (files ready to be committed but not yet saved).
  3. Unpushed commits (commits made locally but not yet pushed to the remote repository).

By the end of this guide, you'll know exactly how to verify the status of your working directory and avoid losing any work.


1. Check for Unstaged Changes

Unstaged changes are modifications you've made to files in your working directory but haven't yet added to the staging area. To check for these changes, use the git status command:

git status
Enter fullscreen mode Exit fullscreen mode

What to Look For

  • Changes not staged for commit: These are files you've modified but haven't staged yet.
  • Untracked files: These are new files you've created but haven't added to Git.

Example Output

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    new-file.txt
Enter fullscreen mode Exit fullscreen mode

2. Check for Staged but Uncommitted Changes

Staged changes are files you've added to the staging area using git add but haven't yet committed. To see these changes, use the git diff --cached command:

git diff --cached
Enter fullscreen mode Exit fullscreen mode

What to Look For

  • This command shows the differences between the files in the staging area and the last commit.

Example Output

diff --git a/README.md b/README.md
index abc1234..def5678 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 # My Project
-This is the old description.
+This is the new description.
+Added a new feature.
Enter fullscreen mode Exit fullscreen mode

3. Check for Unpushed Commits

Unpushed commits are changes you've committed locally but haven't yet pushed to the remote repository. To check for these commits, use the git log command with the --branches --not --remotes options:

git log --branches --not --remotes
Enter fullscreen mode Exit fullscreen mode

What to Look For

  • This command lists all commits that exist in your local branch but not in the remote branch.

Example Output

commit abc1234567890abcdef1234567890abcdef12
Author: Your Name <your.email@example.com>
Date:   Mon Oct 2 12:34:56 2023 +0000

    Added a new feature
Enter fullscreen mode Exit fullscreen mode

4. Comprehensive Workflow

To get a complete picture of your working directory, follow these steps:

  1. Check for unstaged changes:
   git status
Enter fullscreen mode Exit fullscreen mode
  1. Check for staged but uncommitted changes:
   git diff --cached
Enter fullscreen mode Exit fullscreen mode
  1. Check for unpushed commits:
   git log --branches --not --remotes
Enter fullscreen mode Exit fullscreen mode

5. What to Do Next

If You Find Unstaged Changes

  • To stage all changes:
  git add .
Enter fullscreen mode Exit fullscreen mode
  • To stage specific files:
  git add <file-name>
Enter fullscreen mode Exit fullscreen mode

If You Find Staged but Uncommitted Changes

  • Commit the changes:
  git commit -m "Your commit message"
Enter fullscreen mode Exit fullscreen mode

If You Find Unpushed Commits

  • Push the commits to the remote repository:
  git push
Enter fullscreen mode Exit fullscreen mode

If You Want to Discard Changes

  • Discard unstaged changes:
  git checkout -- .
Enter fullscreen mode Exit fullscreen mode
  • Unstage staged changes:
  git reset
Enter fullscreen mode Exit fullscreen mode

6. Summary of Commands

Command Purpose
git status Shows unstaged and untracked files.
git diff --cached Shows staged changes not yet committed.
git log --branches --not --remotes Shows commits not yet pushed to the remote repository.
git add . Stages all changes.
git commit -m "Message" Commits staged changes.
git push Pushes commits to the remote repository.
git checkout -- . Discards unstaged changes.
git reset Unstages staged changes.

7. Pro Tips

  • Automate Checks: Use a Git alias to combine these commands into one. For example:
  git config --global alias.status-all '!git status && git diff --cached && git log --branches --not --remotes'
Enter fullscreen mode Exit fullscreen mode

Now, you can run git status-all to see everything at once.

  • Use a GUI: If you prefer a graphical interface, tools like VS Code, GitKraken, or Sourcetree provide visual representations of your changes.

  • Commit Often: Make small, frequent commits to avoid losing track of changes.


By following these steps, you can ensure that no changes are left behind and your Git workflow remains clean and efficient. Whether you're a beginner or an experienced developer, these commands are essential for managing your codebase effectively.

Let me know if you have any questions or need further assistance!

Top comments (0)