https://github.com/saifaustcse/git-workflow-and-commands
Git workflow with basic commands
https://github.com/saifaustcse/git-workflow-and-commands
git git-basics git-commands git-workflow
Last synced: 3 months ago
JSON representation
Git workflow with basic commands
- Host: GitHub
- URL: https://github.com/saifaustcse/git-workflow-and-commands
- Owner: saifaustcse
- Created: 2020-12-04T10:05:59.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-08-27T04:31:26.000Z (about 4 years ago)
- Last Synced: 2025-04-13T03:41:48.241Z (7 months ago)
- Topics: git, git-basics, git-commands, git-workflow
- Homepage:
- Size: 288 KB
- Stars: 15
- Watchers: 4
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Git Workflow and Commands
Though there are 1000’s of articles about git, I have written this article is in order to document what I understood and how I understood which may help others as well. Here I tried to avoid complexity and wanted to keep it simple and
followed the easiest process.
## Give a Star! :star:
If you like or are using this project to learn or start your solution, please give it a star. Thanks!
## Workflow
## Commands
### Configuration
Git config that lets you get and set configuration variables that control all aspects of how Git looks and operates.
# Display the current Git configuration.
$ git config --list
# Set the user information when submitting code.
git config --global user.name "Saiful Islam"
git config --global user.email "saifaustcse26@gmail.com"
# Check
git config --global user.name
git config --global user.email
### Manage Repository
Create a Repository in git hub/git lab then Clone the Repository
- [How to create git hub repository.](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/create-a-repo)
### Download an existing git repository to your local computer with its entire code history.
$ git clone [url]
### Adding files and folder (Workspace --> Staging)
# Add the specified file from the current directory to the staging.
# Start tracking an untracked file
$ git add [file1] [file2] [fileN]
# Add the specified directory from the current directory to the staging, including subdirectories.
# Start tracking an untracked directory
$ git add [dir]
# Add all files (tracked or untracked) from the current directory to the staging.
# Start tracking a untracked file
# Update the changes of tracked file from the current directory to the staging.
$ git add .
### Commit changes (Staging --> Repository)
# Submit the code from the staging to the Repository with a message
$ git commit -m [message]
# Submit the specified file from the staging to the Repository.
$ git commit [file1] [file2] [fileN] -m [message]
# Display all diff information when submitting.
$ git commit -v
# update and replace the most recent commit with a new commit
$ git commit --amend
### Commit changes (Workspace --> Staging --> Repository)
# Submit the changes of all tracked files after the last commit.
$ git commit -am [message]
# For untracked file
$ git add .
$ git commit -am [message]
### Remote synchronization from Repository(Repository --> Remote)
# Push the current branch to the Remote Repository.
$ git push origin [branch]
### Repository synchronization from remote (Repository <-- Remote)
# Download specific branch.
$ git fetch origin [branch]
# Download all remote branches.
$ git fetch --all
### Workspace synchronization from Repository (Workspace <-- Repository)
# merge the specified branch to the current branch.
$ git merge [branch]
# merge a branch into a target branch
$ git merge [source branch] [target branch]
### Workspace synchronization from remote (Workspace <-- Repository <-- Remote)
# Retrieve the changes to the Remote Repository and merge with the local branch (fetch+merge)
$ git pull origin [branch]
### Branching
# List all local branches. (the asterisk denotes the current branch)
$ git branch
# List all remote branches.
$ git branch -r
# List all local branches and remote branches.
$ git branch -a
# Create a new branch, but still stay in the current branch.
$ git branch [branch-name]
# Create a new branch and switch to the branch.
$ git checkout -b [branch]
# Switch to the specified branch.
$ git checkout [branch-name]
# Switch to the previous branch.
$ git checkout -
# Delete the branch.
$ git branch -d [branch-name]
# Delete the remote branch.
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
### Inspection
# Display the changed files.
$ git status
# Display the version history of the current branch.
$ git log
# Display all commits (Custom Filtering)
$ git log --all
# Display the 5 most recent commits (Custom Filtering)
$ git log -5
# View Commit History in ASCII Graph
$ git log --graph
# Display Just One Line Per Commit
$ git log --oneline
# Display Just One Line Per Commit with message (Custom Formatting)
$ git log --pretty=oneline
# Display all the users who have committed, sorted by number of commits.
$ git shortlog -sn
# Show the latest commits of the current branch.
$ git reflog
For more details:
- [The-official-Git-site](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History)
- [Atlassian](https://www.atlassian.com/git/tutorials/git-log)
- [Thegeekstuff](https://www.thegeekstuff.com/2014/04/git-log/)
### Discard changes from Workspace
# Discard changes from the specified file of the Workspace.
$ git checkout [file]
# Discard all changes of the Workspace.
$ git checkout .
### Revoke/Undo from Staging (Workspace <-- Staging)
# If unwanted file were added to the staging area but not yet committed.
# Restore specified file from the Staging to the Workspace.
# Changes will stay in workspace.
$ git reset [file]
# Restore all files from the Staging to the Workspace.
# Changes will stay in workspace.
$ git reset
$ git reset HEAD .
# Restore all files from the Staging to the Workspace.
# All chnages will be discard.
$ git reset --hard
### Revoke/Undo from Repository (Workspace <-- Staging <-- Repository)
# Restore all files from the Repository to the Workspace.
# All changes will stay on Workspace.
# Undo the last commit.
$ git reset HEAD~1
$ git reset --mixed HEAD~1
# Restore all files from the Repository to the Staging.
# All changes will stay on Staging.
# Undo the last commit.
$ git reset --soft HEAD~1
# Restore all files from the Repository to the Workspace.
# All chnages will be discard.
# Undo the last commit.
$ git reset --hard HEAD~1
### Revoke/Undo from Remote (Workspace <-- Staging <-- Repository <-- Remote)
# Create a new commit to undo the specified commit.
# All changes of the latter will be offset by the former and applied to the current branch.
# This is safe
$ git revert [commit]
$ git commit -m "message"
$ git push origin [branch]
### Removing files or folders (Workspace --> Staging --> Repository --> Remote)
# Manually delete the files or folders from Workspace
# The following command will permanently remove the files or folders
$ git add .
$ git commit -m "message"
$ git push origin [branch]
### Stash
# Temporarily saves or stashes changes of working copy and and move them in later.
$ git stash
# Saving Stashes with the message
$ git stash save ""
# Check the Stored Stashes
$ git stash list
# Restored the changes of latest stash from stashes
# Remove the latest stash from stashes
$ git stash pop
# Restored the changes of latest stash from stashes
$ git stash apply
# Restored the changes of specific stash from stashes
$ git stash apply
# Remove the latest stash from stashes
$ git stash drop
# Remove the specific stash from stashes
$ git stash drop
# Remove all stashes
$ git stash clear
### Tag
# List all tags.
$ git tag
# Create a new tag in the current commit.
$ git tag [tag_name]
# Create a new tag in the specified commit.
$ git tag [tag] [commit]
# Delete the local tag.
$ git tag -d [tag_name]
# Push the specified tag to remote.
$ git push origin [tag_name]
# Push all tags to remote.
$ git push origin --tag
# Delete the remote tag.
$ git push origin :refs/tags/[tag_name]
# View the tag information.
$ git show [tag_name]
# Create a new branch pointing to a certain tag
$ git checkout -b [branch] [tag]
Notes:
# When you want to create a release point for a stable version
# Tag is nothing but a reference name of a commit
# Multiple tag name is possible for same commit
### cherry-pick
# Select a commit to be merged into the current branch.
$ git cherry-pick [commit]
### Checkout vs Reset vs Revert
- [Atlassian](https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting)
- [Medium](https://medium.com/@manivel45/git-merge-vs-rebase-reset-vs-revert-vs-checkout-dd5674d0e18a)
- [opensource](https://opensource.com/article/18/6/git-reset-revert-rebase-commands)
### Merging vs. Rebasing
- [Atlassian](https://www.atlassian.com/git/tutorials/merging-vs-rebasing)
# References
I have followed many articles but among them, the following articles are really helpful. Those articles helped me a lot and also encourage me to write this article according to my understanding.
- [The-official-Git-site](https://git-scm.com/book/en/v2)
- [Atlassian](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html)
- [Git-most-frequently-used-commands](https://medium.com/analytics-vidhya/git-most-frequently-used-commands-9df9f200c235)
- [Ercankaracelik](https://ercankaracelik.wordpress.com/2018/12/08/basic-git-commands/)
- [Tutorialdocs](https://www.tutorialdocs.com/article/git-basic-command-list.html)