Intro
This is the list of git commands I compiled.
Create new local GIT repository
git init [project name]
Copy a repository
git clone username@host:/path/to/repository
Add a file to the staging area – must be done or won’t be saved in next commit
git add temp.txt or git add -A (add everything at once)
My working style is to change one to three files, and only add those.
Suppose you run git add, then change the file again, and then run git commit: what version will you push? The original! Run git add, etc all over again to pick up the latest changes. And note that your git adds can be run over the course of time – not all at once!
Create a snapshot of the changes and save to git directory??
Note that any committed changes won’t make their way to the remote repo
git commit –m “Message to go with the commit here”
Nota bene: git does not allow to add empty folders! If you try, you’ll simply see: nothing to commit, working tree clean
Put some “junk file” like .gitkeep in your empty folder for git add/git commit to work.
Set user-specific values
git config –global user.email youremail
Displays the list of changed files together with the files that are yet to be staged or committed
git status
Undo that git add you just did
git status to see what’s going on. Then
git restore –staged filename
and then another git status to see that that worked.
Send local commits to the master branch of the remote repository
(Replace <master> with the branch where you want to push your changes when you’re not intending to push to the master branch)
git push origin <master>
For real basic setups like mine, where I work on branch master, it suffices to simply do git push
Merge all the changes present in the remote repository to the local working directory
git pull
Create branches and helps you to navigate between them
git checkout -b <branch-name>
Switch from one branch to another
git checkout <branch-name>
View all remote repositories
git remote -v
Connect the local repository to a remote server
git remote add origin <host-or-remoteURL>
Delete connection to a specified remote repository
git remote rm <name-of-the-repository>
List, create, or delete branches
git branch
Delete a branch
git -d <branch-name>
Merge a branch into the active one
git merge <branch-name>
List file conflicts
git diff –base <file-name>
View conflicts between branches before a merge
git diff <source-branch> <target-branch>
List all conflicts
git diff
Mark certain commits, i.e., v1.0
git tag <commitID>
View repository’s commit history, etc
git log, e.g., git log –oneline
Reset index?? and working directory to last git commit
git reset –hard HEAD
Remove files from the index?? and working directory
git rm filename.txt
Revert (undo) changes from a commit as per hash shown by git log –oneline
git revert <hash>
Temporarily save the changes not ready to be committed??
git stash
View info about any git object
git show
Fetch all objects from the remote repository that don’t currently reside in the local working directory
git fetch origin
View a tree object??
git ls-tree HEAD
Search everywhere
git grep <string>
Clean unneeded files and optimize local repository
git gc
Create zip or tar file of a repository
Git archive –format=tar master
Delete objects without incoming pointers??
git prune
Identify corrupted objects
git fsck
Merge conflicts
Today I got this error during my usual git pull:
error: Pulling is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm ' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict.
I did not wish to waste too much time. I tried a few things (git status, etc), none of which worked. As it is a small repository without much at stake and I know which files I changed, I simply deleted the clone and re-cloned the repo, put back the newer versions of the changed files, did a usual git add and git commit and git push. All was good. Not too much time wasted in becoming a gitmaster, a fate I wish to avoid.
Ignore a file
Put the unqualified name of the file in .gitignore at same level as .git. It will not be added to the project. Use this for keeping passwords secret.
Test a command
Most commands have a –dry-run option which prevents it from taking any action. Useful for debugging.
References and related
A convention for commit comments
https://www.freecodecamp.org/news/10-important-git-commands-that-every-developer-should-know/