DEV Community

Cover image for Fix Common Git Mistakes

Fix Common Git Mistakes

datastructures profile image Data Structures ・3 min read

1. Change a Commit Message that Hasn't Been Pushed Yet

git commit --amend -m "New message"

2. Add More Files and Changes to a Commit Before Pushing

# only do this BEFORE you've pushed the commits
git add -A

git commit --amend -m "My new message"

3. Remove Files from Staging Before Committing

git reset HEAD filename

4. Remove Changes from a Commit Before Pushing

# reset back to a specific commit
git reset HEAD~1
# or
git reset [HASH]

5. The Different git Reset Options: --hard, --soft, and --mixed

# Resets the index and working tree
git reset --hard [commit]

# Does not touch the index file or the working tree at all
git reset --soft [commit]

# Resets the index but not the working tree
# Reports what has not been updated
# This is the default action
git reset --mixed [commit]

6. Recover Local Changes from git reset --hard with git reflog

# To look up the commit hash
git reflog

git reset --hard [HASH]

7. Undo a Commit that has Already Been Pushed

# NOTE: Once a commit is pushed, you do NOT want to use git reset
# make a "revert commit" which will "undo" a specific commit
git revert [HASH-TO-UNDO]

8. Push a New Branch to GitHub that Doesn't Exist Remotely Yet

git checkout -b new-branch

git push

#  set the upstream of the local branch at the same time
git push --set-upstream origin new-branch

9. Copy a Commit from One Branch to Another

git cherry-pick [HASH-TO-MOVE]

10. Move a Commit that was Committed on the Wrong Branch

# Get the commit we want
git cherry-pick [HASH-TO-MOVE]

# Remove the commit from the wrong  branch
git reset [HASH-TO-REMOVE]

11. Use git stash to Save Local Changes While Pulling

# Save the local changes,
git stash

# Get remote changes
git pull

# To apply the stashed changed
git stash pop

# You will need to  fix the merge conflict
# Then drop the change from the stash
git stash drop stash@{0}

12. Explore Old Commits with a Detached HEAD, and then Recover

# checkout the hash of an old commit
git checkout [HASH]

# we'll be in a "detached HEAD" state
# Save the work by creating a new branch
git checkout -b my-new-branch

13. Fix a Pull Request that has a Merge Conflict

git checkout -b conflicts_branch

# Add 'Line4' and 'Line5'

git commit -am "add line4 and line5"
git push origin conflicts_branch

git checkout master

# Add 'Line6' and 'Line7'`
git commit -am "add line6 and line7"
git push origin master

14.Cleanup and Delete Branches After a Pull Request

# use the github interface to delete the branch remotely

# Locally
# Confirm that remote is gone
git remote prune origin --dry-run
git remote prune origin

#clean up the feature branch
git branch -d feature-branch

15. Change the Commit Message of a Previous Commit with Interactive Rebase

git log --oneline

# start the interactive rebase
git rebase -i HEAD~3
# and then change pick to reword.
# We can now reword the commit message

16. git Ignore a File that has Already been Committed and Pushed

# We make a file and accidentally push it to github
# To remove it, add it to .gitignore file
# remove all of our files from our git cache
git rm -r --cached .

# add back all the files we want with
git add -A

17. Add a File to a Previous Commit with Interactive Rebase

git rebase -i HEAD~2

# during the interactive rebase, we can add the file, and amend the commi
git commit --amend --no-edit

git rebase --continue

18. Fix Merge Conflicts While Changing Commits During an Interactive Rebase

# ennter interactive rebase
git rebase -i HEAD~2

# Then we can fix that merge conflict like normal, but finish up the rebase
git rebase --continue

19. Squash Commits Before they are Pushed with Interactive Rebase

git rebase -i HEAD~3

# Make the changes in interactive rebase
# Make the commit message for that commit, and once we save the message
# we'll be left with just a single commit

20. Completely Remove a File from Pushed git History

# prune the entire history and garbage collect the remains
git reflog expire --expire=now --all && git gc --prune=now --aggressive

#  use git push to push that change to github,
# and remove the .env file from all of the history

BlogPost Summary

  • Change commit messages
  • Add or remove files from a commit
  • How and when to stash changes
  • What a "detached HEAD" is, and how to fix it
  • Remove secrets from a codebase
  • How to rewrite history

If you notice areas that could be improved please feel free to comment down below.

Follow this channel for more articles on data structures and algorithms,web development,react,angular,vueJs and more !

Discussion (0)

Editor guide