Git & GitHub Cheat Sheet

Git VS
    Git একটা Version Control Mechanism. মানে এটা সবসময় আমাদের File System এর দিকে নজর রাখে ২৪ ঘন্টা  এবং কোন Change হলে সেটার Record রাখে। শুধু তাই নয়, প্রতিটা Change এর আগের এবং পরের Version ও আলাদা আলাদা করে Track রেখে দেয় git.
      আর GitHub হলো এই সব Changes এবং Version এর Cloud Host. অনেকেই মনে করেন Git এবং GithHub একই জিনিস। কিন্তু আসলে তা সঠিক নয়। Git যদি Coffee হয় তাহলে  GitHub হলো Coffee Shop! একজন Programmer হিসেবে যতো tool নিয়েই কাজ করেন না কেন, তার মধ্যে সবচেয়ে গুরুত্বপূর্ণ Tool হলো Git ! ডেভেলপাররা সাধারণত প্রজেক্টের ভার্সন কন্ট্রোল এবং একই প্রজেক্টে একের অধিক ডেভেলপার কাজ করার জন্য গিট ব্যবহার করে।

      ইনস্টল (Setup)
      • গিট ইনস্টল ( ম্যাক )  → brew install git
      • গিট আনইনস্টল (ম্যাক) → brew remove git 
      • গিট ইনস্টল (উবুন্টু) → sudo apt-get install git
      • গিট আনইনস্টল (উবুন্টু) → sudo apt-get remove git
      • গিট ভার্সন চেক → git --version
      • গিটটি কোথায় রয়েছে তা দেখুন → which git
      • গিট সাহায্য → git help

      সাধারণ (General)
      • নতুন রিপোজিটরি তৈরী করা → git init
      • কোনো রিপোজিটরি ক্লোন করা(লোকাল মেশিনে ডাউনলোড করা) → git clone [url]
      • রিপোজিটরি এর বর্তমান অবস্থা/পরিবর্তনগুলো দেখা (নতুন অথবা পুরোনো, কি কি ফাইল কমিট করতে হবে, ওয়ার্কিং ব্রাঞ্চ ইত্যাদি) → git status
      • কমিট এর জন্যে সব পরিবর্তিত ফাইল এড করা → git add OR git add . OR git add --all OR git add -A
      • কাস্টম ফাইল কমিট এর জন্যে এড করা → git add index.html OR git add [file]
      • একটি নির্দিষ্ট এক্সটেনশন এর সকল ফাইল এড করা → git add *.ext
      • একটি নির্দিষ্ট ফোল্ডারের সকল ফাইল এড করা → git add /folder
      • একটি নির্দিষ্ট ফোল্ডারের একটি নির্দিষ্ট এক্সটেনশন এর সকল ফাইল এড করা → git add folder/*.ext
      • রিপোজিটরি তে কিছু কমিট করা (কমিট মেসেজসহ) → git commit -m "YourCommitMessage"
      • কমিট মেসেজ সংশোধন করা → git commit --amend -m "your message"
      • টাইটেল এবং ডেসক্রিপশন সহ কমিট করতে → git commit -m "Title" -m "Description..."
      • অ্যাড এবং কমিট এক স্টেপ এ করতে → git commit -am "Message"
      • নির্দিষ্ট কমিট দেখা → git show {commit-id}
      • সমস্ত পরিবর্তন আপডেট করতে → git add -u
      • গিট ডাইরেক্টরি তৈরি করা →  mkdir (NAME-OF-YOUR-NEW-DIRECTORY)
      • গিট (git bash) ফাইল তৈরি   → touch  ( type File Name newFile.txt/html/css all kinds file extensions )
      • গিট (git Git CMD) ফাইল তৈরি   → echo  ( type File Name newFile.txt/html/css all kinds file extensions )
      • গিট সবগুল ডাইরেক্টরি এবং ফাই দেখার জন্য → ls or dir
      • গিট ফাইল রিমুভ করতে → rm (type your fie Name)
      • গিট  ডাইরেক্টরি রিমুভ করতে → rm -r (type your folder 📂 name)
      • রিপোজিটরিতে এড করা ফাইল আনট্র্যাক করা → git rm --cached index.html OR git rm --cached filename
      • gitignore এ থাকা সকল ফাইল আনট্র্যাক করা → git rm -r --cached .
      • ফাইল মুভ অথবা রিনেইম করতে → git mv index.html dir/index_new.html
      • নির্দিষ্ট কমিট পরিবর্তন না করা (ফাইল সর্বশেষ কমিট ভার্সন থেকে রিস্টোর করতে) → git checkout -- index.html
      • সকল কমিট পরিবর্তন না করা → git checkout -- .
      • ফাইল কাস্টম কমিট ভার্সন থেকে রিস্টোর করতে (কারেন্ট ব্রাঞ্চ এ) → git checkout 6eb715d -- index.html
      • গিট ডাইরেক্টরি তৈরি করা →  mkdir (NAME-OF-YOUR-NEW-DIRECTORY)

      আপডেট এবং ডিলিট (Update & Delete)
      • আনট্র্যাক ফাইলগুলো টেস্ট ডিলিট করতে → git clean -n
      • আনট্র্যাক ফাইলগুলো ডিলিট করতে → git clean -f
      • আনস্টেজড → (undo adds) git reset HEAD index.html

      কনফিগ (Config)
      • গিট এর গ্লোবাল ইউজার নেম সেট করা → git config --global user.name "username"
      • গিট এর গ্লোবাল ইউজার নেম চেক করা → git config --global user.name
      • গিট এর গ্লোবাল ইউজার ইমেল সেট করা → git config --global user.email "[email protected]"
      • গিট এর গ্লোবাল ইউজার ইমেল চেক করা → git config --global user.email
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার নেম সেট করা → git config user.name "username"
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার নেম চেক করা → git config user.name
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার ইমেল সেট করা → git config user.email "[email protected]"
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার ইমেল চেক করা → git config user.email
      • গিট এর গ্লোবাল ইউজার নেম বাতিল করা → git config --global --unset-all user.name
      • গিট এর গ্লোবাল ইউজার ইমেইল বাতিল করা → git config --global --unset-all user.email
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার নেম বাতিল করা → git config --unset user.name
      • গিট এর লোকাল/একটি নির্দিষ্ট রিপোজিটরির ইউজার ইমেইল বাতিল করা → git config --unset user.email
      • একটি নির্দিষ্ট ব্রাঞ্চের জন্য ইউজার নেম, পাসওয়ার্ড সেভ করা → git config credential.helper store
      • সকল ব্রাঞ্চের জন্য ইউজার নেম, পাসওয়ার্ড সেভ করা → git config --global credential.helper store

      রিসেট (Reset)
      • কমিট প্রত্যাবর্তন করা → git revert {commit-id} OR git revert <commit hash>
      • সর্বশেষ কমিট প্রত্যাবর্তন করা → git revert HEAD
      • নির্দিষ্ট কমিট প্রত্যাবর্তন করা → git revert -n <commit hash>
      • সফট রিসেট (move HEAD only; neither staging nor working dir is changed) git reset --soft {commit-id}
      • শেষ কমিট থেকে stage এরিয়া তে মুভ করা → git reset --soft HEAD~
      • মিক্সেড রিসেট (move HEAD and change staging to match repo; does not affect working dir) → git reset --mixed {commit-id}
      • হার্ড রিসেট (move HEAD and change staging dir and working dir to match repo) → git reset --hard {commit-id}
      • শেষ কমিট ডিলেট করা → git reset --hard HEAD^
      • শেষ দুটি কমিট ডিলেট করা → git reset --hard HEAD^^
      • সিঙ্গেল ফাইল হার্ড রিসেট করতে (@ is short for HEAD) → git checkout @ -- index.html

      ব্রাঞ্চ (Branch)
      • সব লোকাল ব্রাঞ্চ এর নাম লিস্ট করা → git branch
      • নতুন ব্রাঞ্চ তৈরী → git branch [branch_name]
      • ব্রাঞ্চ চেঞ্জ করতে → git checkout [branch_name]
      • ব্রাঞ্চ তৈরী এবং চেঞ্জ করা → git checkout -b "branch name"
      • রিপোজিটরি/ব্রাঞ্চ রিনেম করা → git branch -m branchname new_branchname OR git branch --move branchname new_branchname
      • কারেন্ট ব্রাঞ্চ এর সাথে মার্জ করা সকল ব্রাঞ্চগুলো শো করতে → git branch --merged
      • ব্রাঞ্চ রিমুভ করা (only possible if not HEAD) → git branch -d branchname OR git branch --delete branchname
      • রিমোট ব্রাঞ্চ রিমুভ করা → git push --delete origin [branch-name]
      • মার্জ করা না এমন ব্রাঞ্চ রিমুভ করতে → git branch -D branch_to_delete


      স্টাশ (Stash)
      • স্টাশ এ রাখতে → git stash save "Message"
      • স্টাশ লিস্ট শো করতে → git stash list
      • স্টাশ স্ট্যাটাস শো করতে → git stash show stash@{0}
      • স্টাশ এর পরিবর্তনগুলি শো করতে → git stash show -p stash@{0}
      • স্টাশ এর সবগুলি আইটেম একসাথে ব্যবহার এবং ড্রপ করতে → git stash pop
      • স্টাশ লিস্ট এর স্পেসিফিক আইটেম ব্যবহার এবং ড্রপ করতে → git stash pop stash@{0}
      • স্টাশ লিস্ট এর স্পেসিফিক আইটেম শুধু ব্যবহার এবং ড্রপ না করতে → git stash apply stash@{0}
      • কাস্টম স্টাশ আইটেম ব্যবহার এবং ইনডেক্স করতে → git stash apply --index
      • স্টাশ থেকে নতুন ব্রাঞ্চ করতে → git stash branch new_branch
      • স্টাশ লিস্ট এর প্রথম আইটেম বাদ দিতে → git stash drop
      • স্টাশ লিস্ট এর স্পেসিফিক আইটেম বাদ দিতে  → git stash drop stash@{0}
      • সম্পূর্ণ স্টাশ ডিলিট করতে  → git stash clear
      • তুলনা (Compare) শেষ কমিট এবং বর্তমান unstaged ভার্শনের পার্থক্য দেখা  → git diff
      • মডিফাইড ফাইলস তুলনা এবং পরিবর্তনগুলি হাইলাইট করতে  → git diff --color-words index.html
      • শেষ কমিট এবং বর্তমান staged ভার্শনের পার্থক্য দেখা  → git diff --staged
      • সর্বশেষ কমিটের আগের কমিট ও সর্বশেষ কমিটের মাঝে তুলনা করতে → git diff HEAD^ HEAD
      • ব্রাঞ্চগুলো তুলনা করতে → git diff main..branchname
      • উপরের মত ব্রাঞ্চগুলো তুলনা করতে → git diff --color-words main..branchname^
      • কমিটগুলো তুলনা করতে  → git diff {commit-id} git diff {commit-id}..HEAD git diff {commit-id}..{commit-id}
      • ফাইল এর কমিটগুলো তুলনা করতে  → git diff {commit-id} index.html git diff {commit-id}..{commit-id} index.html
      • দরকারী তুলনা  → git diff --stat --summary {commit-id}..HEAD
      • ব্ল্যাম  → git blame -L10,+1 index.html

      সহযোগিতা (Collaborate)
      • রিমোট শো করতে  → git remote
      • সবগুলো রিমোটের লিস্ট নাম এবং URL সহ দেখা  → git remote -v
      • নতুন রিমোট এড করা  → git remote add <RemoteName> <RemoteURL> 
      • রিমোট পরিবর্তন করা  → git remote set-url <RemoteName> <RemoteURL>
      • Fork রিপোজিটরি ক্ষেত্রে আপস্ট্রিম রিমোট এড করা  → git remote add upstream <RemoteURL>
      • Fork রিপোজিটরি ক্ষেত্রে আপস্ট্রিম রিমোট পরিবর্তন করা  → git remote set-url upstream <RemoteURL>
      • সার্ভারে আপস্ট্রিম রিমোট কনফিগার করা  → git remote add upstream ssh://[email protected]/path/to/repository/.git
      • অন্য রিপোজিটরি থেকে ব্রাঞ্চ/রেফ/অবজেক্ট fetch করা  → git fetch RepositoryName
      • Fetch/Fork রিপোজিটরি কে আপস্ট্রিম(upstream) এর সাথে up-to-date রাখা  →git fetch upstream
      • fetched কমিটগুলো মার্জ করতে  → git merge upstream/main OR git merge upstream/branchname
      • কাস্টম ব্রাঞ্চ Fetch করতে  → git fetch upstream branchname:local_branchname
      • অরিজিন রিমুভ করতে  → git remote rm origin
      • সব রিমোট ব্রাঞ্চ এর নাম লিস্ট করা  → git branch -r
      • সব লোকাল এবং রিমোট ব্রাঞ্চ এর নাম লিস্ট করা  → git branch -a
      • রিমোট ব্রাঞ্চ থেকে ব্রাঞ্চ তৈরি এবং চেকআউট করতে  → git checkout -b local_branchname upstream/remote_branchname
      • রিপোজিটরি তে লোকাল ব্রাঞ্চ থেকে আপলোড করা  → git push -u origin main OR git push -u origin [branchName]
      • পুশ  →git push origin main
      • বর্তমান/ Checkout/ Current ব্রাঞ্চ এ পুশ করতে  → git push origin HEAD
      • ফোর্স পুশ  → git push origin main --force
      • রিপোজিটরি থেকে নতুন চেঞ্জ গুলো পুল করা  → git pull
      • স্পেসিফিক ব্রাঞ্চ পুল করতে  → git pull origin branchname
      • কোনো রিপোজিটরি ক্লোন করা(লোকাল মেশিনে ডাউনলোড করা)  → git clone https://github.com/user/project.git OR git clone ssh://[email protected]/~/dir/.git
      • লোকাল ফোল্ডার এ ক্লোন করতে  → git clone https://github.com/user/project.git ~/dir/folder
      • স্পেসিফিক ব্রাঞ্চ লোকাল এ ক্লোন করতে  → git clone -b branchname https://github.com/user/project.git
      • অথেনটিকেশন টোকেন ব্যবহার করে ক্লোন করতে  → git clone https://oauth2:<token>@gitlab.com/username/repo.git
      • রিমোট ব্রাঞ্চ ডিলিট করতে  → git push origin :branchname OR git push origin --delete branchname
      • কন্ট্রিবিউটরদের নামের লিস্ট দেখা  → git shortlog -sn
      • কন্ট্রিবিউটরদের নাম এবং তাঁদের সকল কমিট লিস্ট আকারে দেখা git shortlog

      গিটহাব ইস্যু (Github issues)
      • close
      • closes
      • closed
      • fix
      • fixes
      • fixed
      • resolve
      • resolves
      • resolved

      মার্জ (Merge)
      • ট্রু মার্জ (fast forward)  → git merge branchname
      • মাস্টারে মার্জ করতে  (only if fast forward)  → git merge --ff-only branchname
      • মাস্টারে মার্জ করতে (force a new commit)  → git merge --no-ff branchname
      • মার্জ বন্ধ করতে (in case of conflicts)  → git merge --abort
      • মার্জ বন্ধ করতে (in case of conflicts)  → git reset --merge // prior to v1.7.4
      • লোকাল মার্জ আন্ডু করতে যেই মার্জটি এখনো পুশ করা হইনাই  → git reset --hard origin/main
      • স্পেসিফিক একটি কমিট মার্জ করতে  → git cherry-pick {commit-id}
      • রিবেস  → git checkout branchname » git rebase main OR git merge main branchname
      • রিবেস ক্যানসেল করতে  → git rebase --abort
      • মাল্টিপল কমিট একটি কমিট এ স্কোয়াশ করতে  → git rebase -i HEAD~3 (source)
      • ফীচার ব্রাঞ্চ Squash-merge করতে (একটি কমিট এ)  → git merge --squash branchname (commit afterwards)

      লগ (Log)
      • কমিট লগ বিস্তারিত দেখতে → git log
      • এক লাইন এ কমিট লগ এর সামারি শো করতে → git log --oneline
      • এক লাইন এ কমিট লগ এর সামারি ফুল SHA-1 ফরম্যাট এ শো করতে → git log --format=oneline
      • কমিট লগ সামারি আকারে দেখতে((৫টি) → git log --oneline -5
      • শুধুমাত্র কাস্টম কমিটগুলো শো করতে → git log --author="Sven" git log --grep="Message" git log --until=2013-01-01 git log --since=2013-01-01
      • শুধুমাত্র কাস্টম কমিট এর ডাটা শো করতে → git log --format=short git log --format=full git log --format=fuller git log --format=email git log --format=raw
      • পরিবর্তনগুলি শো করতে → git log -p
      • শুধুমাত্র কাস্টম ফাইল এর সবগুলো কমিট শো করতে → git log 6eb715d.. index.html
      • শুধুমাত্র কাস্টম ফাইল এর সবগুলো কমিট এর পরিবর্তনগুলি শো করতে → git log -p 6eb715d.. index.html
      • কমিটগুলোর স্ট্যাটাস এবং সামারি শো করতে → git log --stat "," git log --stat --summary
      • কমিটগুলোর হিস্ট্রি গ্রাফ আকারে শো করতে → git log --graph
      • কমিটগুলোর হিস্ট্রি গ্রাফ আকারে সামারি শো করতে → git log --oneline --graph --all --decorate

      রিলিজ & ভার্সন (Releases & Version)
      • ট্যাগ লিস্ট দেখতে → git tag
      • ট্যাগ তৈরি করা → git tag [tag-name]
      • প্রকাশিত সবগুলো ভার্শন কমিটগুলো সহ শো করতে → git tag -l -n1
      • রিলিজ ভার্শন তৈরী করতে → git tag v1.0.0
      • কমেন্টসহ রিলিজ ভার্শন তৈরী করতে → git tag -a v1.0.0 -m 'Message'
      • নির্দিষ্ট রিলিজ ভার্শনে চেকআউট করতে → git checkout v1.0.0

      গিট্ ফ্লো (Git flow)
      • Homebrew দিয়ে গিট flow ইনস্টল (ম্যাক) → brew install git-flow-avh
      • Macports দিয়ে গিট flow ইনস্টল (ম্যাক) → port install git-flow-avh
      • গিট flow ইনস্টল (লিনাক্স) → apt-get install git-flow
      • গিট flow ইনস্টল (উইন্ডোজ) → wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash
      • গিট flow শুরু করা → git flow init
      • নতুন ফিচার শুরু করা → git flow feature start features_name
      • ফিচার শেষ করা → git flow feature finish features_name
      • ফিচার পাবলিশ করা → git flow feature publish features_name
      • ফিচার পুল করা → git flow feature pull origin features_name
      • ফিচার ট্র্যাক করা → git flow feature track features_name
      • রিলিজ শুরু করা → git flow release start RELEASE [BASE]
      • রিলিজ শেষ করা → git flow release finish RELEASE
      • রিলিজ পাবলিশ করা → git flow release publish RELEASE
      • রিলিজ ট্র্যাক করা → git flow release track RELEASE
      • হটফিক্স শুরু করা → git flow hotfix start VERSION [BASENAME]
      • হটফিক্স শেষ করা → git flow hotfix finish VERSION

      Post a Comment

      Previous Post Next Post