git stashআপনার কাজের ডিরেক্টরির পরিবর্তনগুলি সাময়িকভাবে সংরক্ষণ করে যাতে আপনি অসম্পূর্ণ কাজ না করেই প্রসঙ্গ পরিবর্তন করতে পারেন। এটি সবচেয়ে দরকারী কিন্তু কম ব্যবহার করা গিট কমান্ডগুলির মধ্যে একটি। এই নির্দেশিকা ব্যবহারিক উদাহরণ সহ প্রতিটি সাবকমান্ড কভার করে।
📋 Table of Contents
- মূল ধারণা
- git stash কমান্ড
- স্ট্যাশে তালিকা করা এবং পরিদর্শন করা
- পুনঃস্থাপন: পপ বনাম প্রয়োগ
- স্ট্যাশ প্রয়োগ করার সময় দ্বন্দ্ব
- একটি স্ট্যাশ থেকে শাখা
- স্টেশ অপসারণ করা হচ্ছে
- ইন্টারেক্টিভ মোড সহ আংশিক স্ট্যাশ
- কমন ডেভেলপার ওয়ার্কফ্লোস
- গিট স্ট্যাশ বনাম গিট কমিট –এমেন্ড বনাম গিট ওয়ার্কট্রি
- প্রায়শই জিজ্ঞাসিত প্রশ্ন
- উপসংহার
মূল ধারণা
# You're in the middle of feature work and need to switch branches
git status
# M src/auth.ts ← modified
# M src/utils.ts ← modified
# ?? src/new-file.ts ← untracked
git checkout main # ERROR: would overwrite changes
# git stash saves and cleans your working directory
git stash
# Saved working directory and index state WIP on feature: abc123 Add auth
git checkout main # ✅ now clean working tree
# ... do what you needed on main ...
git checkout feature
git stash pop # restore your changes
git stash কমান্ড
# Save stash with a message (recommended — harder to forget what it was)
git stash push -m "WIP: auth middleware refactor"
# Short form (saves tracked changes only)
git stash
# Include untracked files
git stash push --include-untracked # or -u
# Include untracked AND ignored files (rare)
git stash push --all # or -a
# Partial stash — choose specific files
git stash push -m "just auth changes" -- src/auth.ts src/auth.test.ts
স্ট্যাশে তালিকা করা এবং পরিদর্শন করা
# List all stashes
git stash list
# stash@{0}: WIP on feature: abc123 Add auth
# stash@{1}: WIP on main: def456 Fix bug
# stash@{2}: On feature: Manual save before experiment
# Show what's in a stash (summary)
git stash show # most recent
git stash show stash@{1} # specific stash
# Show full diff of a stash
git stash show -p stash@{0}
পুনঃস্থাপন: পপ বনাম প্রয়োগ
# git stash pop — apply AND remove from stash list
git stash pop # applies stash@{0} and removes it
git stash pop stash@{2} # apply a specific stash
# git stash apply — apply but KEEP in stash list
git stash apply # applies stash@{0}, keeps it in list
git stash apply stash@{1}
# When to use apply:
# - When you want to apply the same stash to multiple branches
# - When you're not sure the apply will be clean and want to retry
# - As a safety measure — you can always drop manually after
স্ট্যাশ প্রয়োগ করার সময় দ্বন্দ্ব
# If the stash conflicts with current branch state:
git stash pop
# CONFLICT (content): Merge conflict in src/auth.ts
# The stash entry is NOT removed when conflicts occur
# Fix conflicts normally
git add src/auth.ts
git stash drop # manually remove the stash after resolving
# (pop would have removed it automatically if no conflicts)
একটি স্ট্যাশ থেকে শাখা
# Create a new branch FROM the commit where the stash was saved
# and apply the stash to it — useful when stash won't apply cleanly to current branch
git stash branch my-new-branch stash@{0}
# This is equivalent to:
# git checkout -b my-new-branch stash-parent-commit
# git stash apply stash@{0}
# git stash drop stash@{0}
স্টেশ অপসারণ করা হচ্ছে
# Remove specific stash
git stash drop stash@{0}
# Remove most recent stash
git stash drop
# Remove ALL stashes (dangerous — no undo)
git stash clear
ইন্টারেক্টিভ মোড সহ আংশিক স্ট্যাশ
# Interactively choose which hunks to stash (like git add -p)
git stash push --patch # or -p
# Shows each changed hunk and asks: stash this hunk? (y/n/d/a/e/?)
# Useful when a file has changes you want to stash and changes you want to keep
কমন ডেভেলপার ওয়ার্কফ্লোস
# Workflow 1: Quick context switch
git stash push -m "WIP: new feature"
git checkout main
git pull origin main
# ... fix urgent bug ...
git checkout feature
git stash pop
# Workflow 2: Stash before risky rebase
git stash push -u -m "Before rebase backup"
git rebase origin/main
# If rebase goes wrong: git stash pop restores your state
# (though git reflog is better for full recovery)
# Workflow 3: Test clean build
git stash push -u # stash everything including untracked
npm run build # verify clean build works
git stash pop # restore your work
# Workflow 4: Apply stash to different branch
git stash push -m "shared config changes"
git checkout feature-a
git stash apply stash@{0} # apply (keep in list)
git checkout feature-b
git stash apply stash@{0} # apply to second branch too
git stash drop stash@{0} # now drop it
গিট স্ট্যাশ বনাম গিট কমিট –এমেন্ড বনাম গিট ওয়ার্কট্রি
| দৃশ্যকল্প | সেরা টুল |
|---|---|
| দ্রুত প্রসঙ্গ সুইচ (একই মেশিন, 5-30 মিনিট) | git stash |
| একই সাথে দুটি শাখায় কাজ করুন | git worktree add |
| রিমোটে পুশ করার ক্ষমতা সহ WIP সেভ করুন | git commit -m "WIP" (পরে ঠিক করুন) |
| শেষ প্রতিশ্রুতি পূর্বাবস্থায় ফিরিয়ে আনুন কিন্তু পরিবর্তনগুলি রাখুন | git reset HEAD~1 |
প্রায়শই জিজ্ঞাসিত প্রশ্ন
প্রশ্ন: গিট স্ট্যাশ কি শাখা জুড়ে কাজ করে?
উঃ হ্যাঁ। স্ট্যাশ একটি বিশ্বব্যাপী স্ট্যাক — শাখা-নির্দিষ্ট নয়। আপনি শাখা A-তে লুকিয়ে রাখতে পারেন, B শাখায় স্যুইচ করতে পারেন এবং সেখানে স্ট্যাশ পপ করতে পারেন। যদি ফাইলগুলি B শাখার সাথে বিবাদ করে, আপনি সমাধান করার জন্য একটি মার্জ বিরোধ পাবেন।
প্রশ্ন: গিট স্ট্যাশ কি আনট্র্যাক করা ফাইল সংরক্ষণ করবে?
উত্তর: ডিফল্টরূপে নয়। ব্যবহার করুনgit stash push -u (বা--include-untracked) নতুন আনট্র্যাক করা ফাইলগুলি অন্তর্ভুক্ত করতে। ব্যবহার করুনgit stash push -a (অথবা--all) আনট্র্যাক করা এবং গিট উপেক্ষা করা ফাইল উভয়ই অন্তর্ভুক্ত করতে।
প্রশ্ন: আমি ঘটনাক্রমে আমার স্ট্যাশ ফেলে দিয়েছি — আমি কি এটি পুনরুদ্ধার করতে পারি?
উত্তরঃ সম্ভবত। চালানgit fsck --no-reflog | awk '/dangling commit/ {print $3}' ঝুলন্ত কমিট খুঁজে পেতে. তারপরgit show <hash> আপনার স্ট্যাশ সামগ্রী সনাক্ত করতে, এবংgit stash apply <hash> এটি পুনরুদ্ধার করতে Git আবর্জনা সংগ্রহের ~30 দিনের মধ্যে কাজ করে।
প্রশ্নঃ আমার কতগুলো স্টেশ থাকতে পারে?
উত্তর: কোন ব্যবহারিক সীমা নেই। কিন্তু আপনার যদি 10+ স্ট্যাশ থাকে, তাহলে WIP কমিট করার কথা বিবেচনা করুন বা পরিবর্তে গিট ওয়ার্কট্রি ব্যবহার করুন — একটি দীর্ঘ স্ট্যাশ তালিকা স্থগিত সিদ্ধান্তের লক্ষণ।
প্রশ্ন: আমি কি শুধুমাত্র মঞ্চস্থ পরিবর্তনগুলি লুকিয়ে রাখতে পারি?
উঃ হ্যাঁঃgit stash push --staged সূচীতে যা আছে (মঞ্চস্থিত) তা কেবলমাত্র স্থির রাখে, কার্যকারী ডিরেক্টরিতে পর্যায়বিহীন পরিবর্তনগুলি রেখে। ছোট লজিক্যাল ইউনিটে পরিবর্তনগুলি আলাদা করার জন্য দরকারী।
উপসংহার
git stash অসম্পূর্ণ কাজ না করে পরিচ্ছন্ন প্রসঙ্গ পরিবর্তনের জন্য অপরিহার্য। মূল আদেশ:git stash push -u -m "description" সংরক্ষণ করতে (আনট্র্যাক করা সহ),git stash pop পুনরুদ্ধার এবং অপসারণ,git stash apply পুনরুদ্ধার এবং রাখা। ব্যবহার করুনgit stash branch যখন স্ট্যাশ আপনার বর্তমান শাখায় পরিষ্কারভাবে প্রযোজ্য হবে না। স্ট্যাশ হল একটি LIFO স্ট্যাক — এটি সক্রিয়ভাবে বজায় রাখুন, আপনার আর প্রয়োজন নেই এমন স্টেশ ফেলে দিন এবং এটিকে 3-4টি এন্ট্রির বেশি জমা হতে দেবেন না।
🔗 Share this article
✍️ Leave a Comment