ত্রুটিআপডেটগুলি প্রত্যাখ্যান করা হয়েছে কারণ রিমোটে এমন কাজ রয়েছে যা স্থানীয়ভাবে আপনার নেই (একটি নন-ফাস্ট-ফরোয়ার্ড ত্রুটি) মানে কেউ ঠেলে রিমোট শাখায় কমিট করে যা আপনার কাছে নেই। গিট তাদের কাজ ওভাররাইট প্রতিরোধ করতে আপনার ধাক্কা ব্লক করে। নিরাপদে এটি কীভাবে সমাধান করবেন তা এখানে।এই ত্রুটির মানে কি
📋 Table of Contents
- কেউ (অথবা অন্য মেশিন থেকে) আপনি শেষবার টানার পর দূরবর্তী শাখায় কমিট পুশ করেছেন। আপনার স্থানীয় শাখা এবং দূরবর্তী ভিন্ন হয়েছে. গিট আপনাকে ধাক্কা দিতে দেবে না কারণ এটি তাদের প্রতিশ্রুতি বাতিল করবে।
- এটি নিরাপদ ডিফল্ট। এটি একটি মার্জ কমিটের মাধ্যমে আপনার সাথে রিমোট কমিটগুলিকে একীভূত করে, তারপর আপনার পুশ সফল হয়৷
- Rebasing একটি মার্জ কমিট ছাড়া একটি পরিষ্কার, রৈখিক ইতিহাস দেয়। অনেক দল এটি পছন্দ করে। আপনার প্রতিশ্রুতিগুলি সর্বশেষ দূরবর্তী কাজের উপরে পুনরায় প্লে করা হয়।
- একটি ডিফল্ট পুল কৌশল সেট করুন
- যখন আপনি নিশ্চিত হন যে আপনি ওভাররাইট করতে চান (বিপজ্জনক)
- সতর্কতা:
- প্রায়শই জিজ্ঞাসিত প্রশ্ন
- প্রশ্ন: এটা ঠিক করতে আমার কি মার্জ বা রিবেস করা উচিত?
- আগে দূরবর্তী পরিবর্তনগুলি টানুন ( || . ভাগ করা শাখায় জোর করে চাপ দেবেন না – এটি অন্যের কাজকে ধ্বংস করে। আপনি যদি আপনার নিজস্ব বৈশিষ্ট্য শাখা ওভাররাইট করতে হয়, তাহলে
কেউ (অথবা অন্য মেশিন থেকে) আপনি শেষবার টানার পর দূরবর্তী শাখায় কমিট পুশ করেছেন। আপনার স্থানীয় শাখা এবং দূরবর্তী ভিন্ন হয়েছে. গিট আপনাকে ধাক্কা দিতে দেবে না কারণ এটি তাদের প্রতিশ্রুতি বাতিল করবে।
$ git push origin main
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'origin'
hint: Updates were rejected because the remote contains work that
hint: you do not have locally. This is usually caused by another
hint: repository pushing to the same ref.
ফিক্স 1: টানুন, তারপর পুশ করুন (একত্রিত করুন)
এটি নিরাপদ ডিফল্ট। এটি একটি মার্জ কমিটের মাধ্যমে আপনার সাথে রিমোট কমিটগুলিকে একীভূত করে, তারপর আপনার পুশ সফল হয়৷
# Fetch and merge the remote changes into your local branch
git pull origin main
# This creates a merge commit combining their work and yours.
# Resolve any conflicts if they occur, then:
git push origin main
ফিক্স 2: পুল উইথ রিবেস (ক্লিনার হিস্ট্রি)
Rebasing একটি মার্জ কমিট ছাড়া একটি পরিষ্কার, রৈখিক ইতিহাস দেয়। অনেক দল এটি পছন্দ করে। আপনার প্রতিশ্রুতিগুলি সর্বশেষ দূরবর্তী কাজের উপরে পুনরায় প্লে করা হয়।
# Replay YOUR commits on top of the remote's - linear history, no merge commit
git pull --rebase origin main
# If conflicts occur during rebase, resolve them, then:
git add
git rebase --continue
# Then push
git push origin main
ফিক্স 3: প্রথমে আনুন এবং পর্যালোচনা করুন (সতর্ক দৃষ্টিভঙ্গি)
একটি ডিফল্ট পুল কৌশল সেট করুন
# See what's on the remote before integrating
git fetch origin
# Compare your branch with the remote
git log HEAD..origin/main # commits on remote you don't have
git log origin/main..HEAD # your commits not on remote
# Then choose to merge or rebase
git merge origin/main # or: git rebase origin/main
git push origin main
যখন আপনি নিশ্চিত হন যে আপনি ওভাররাইট করতে চান (বিপজ্জনক)
# Configure how git pull behaves (avoids the "divergent branches" warning)
# Merge (default) - creates merge commits
git config --global pull.rebase false
# Rebase - linear history
git config --global pull.rebase true
# Fast-forward only - fail if not possible (forces you to decide)
git config --global pull.ff only
সতর্কতা:
# ⚠️ ONLY if you're certain the remote commits should be discarded
# (e.g., your own feature branch nobody else uses)
# --force-with-lease is safer than --force:
# it fails if the remote changed since your last fetch
git push --force-with-lease origin my-feature-branch
# ❌ NEVER force push to shared branches (main, develop)
# It permanently deletes other people's commits
git push --force origin main # DON'T do this on shared branches
একটি ভাগ করা শাখায় বলপ্রয়োগ অন্য লোকেদের প্রতিশ্রুতিকে ধ্বংস করে। শুধুমাত্র আপনার নিজস্ব বৈশিষ্ট্য শাখাগুলিতে জোর করে চাপ দিন যেগুলিতে অন্য কেউ কাজ করে না এবং পছন্দ করেপার্থক্য বোঝা--force-with-lease.
প্রায়শই জিজ্ঞাসিত প্রশ্ন
# Before: your local and remote have diverged
# A---B---C (your local main)
# # D---E (remote main - someone else's commits)
# git pull (merge) creates:
# A---B---C---F (merge commit)
# \ /
# D---E
# git pull --rebase creates (cleaner):
# A---B---D---E---C' (your C replayed on top)
প্রশ্ন: এটা ঠিক করতে আমার কি মার্জ বা রিবেস করা উচিত?
উত্তর: মার্জ (গিট টান) নিরাপদ ডিফল্ট এবং সঠিক ইতিহাস সংরক্ষণ করে। Rebase (git pull –rebase) ক্লিনার লিনিয়ার ইতিহাস দেয়। ভাগ করা শাখার জন্য, হয় কাজ করে; পিআরের আগে আপনার নিজস্ব বৈশিষ্ট্য শাখার জন্য, রিবেস ইতিহাসকে পরিপাটি রাখে। আপনার দলের সম্মেলন অনুসরণ করুন.
প্রশ্নঃ কেন আমি জোর করে ধাক্কা দিতে পারি না?
উত্তর: একটি ভাগ করা শাখায় জোর করে ঠেলে অন্যদের ধাক্কা দেওয়া কমিটগুলিকে স্থায়ীভাবে মুছে দেয় — আপনি তাদের কাজ হারাবেন। শুধুমাত্র আপনার নিজস্ব বৈশিষ্ট্য শাখায় জোর ধাক্কা ( –force-with-lease) যা অন্য কেউ ব্যবহার করে না। কখনই মেইন বা বিকাশকে জোর করবেন না।
প্রশ্নঃ কি –ফোর্স-ওয়াথ-লিজ করে যে –ফোর্স করে না?
আপনার শেষ আনার পর থেকে রিমোটটি পরিবর্তিত হয়নি তা পরীক্ষা করে — যদি কেউ এর মধ্যে ধাক্কা দেয়, এটি ওভাররাইট করার পরিবর্তে ব্যর্থ হয়। এটি একটি নিরাপত্তা জাল যা দুর্ঘটনাক্রমে ধ্বংস হওয়া প্রতিবন্ধকতাগুলিকে প্রতিরোধ করে যা আপনি দেখেননি৷ সর্বদা প্লেইন –ফোর্সের চেয়ে এটি পছন্দ করুন।
A: --force-with-leaseপ্রশ্ন: টানার পর আমি মার্জ দ্বন্দ্ব পেয়েছি। এখন কি?
উত্তর: বিরোধপূর্ণ ফাইলগুলি খুলুন, দ্বন্দ্বগুলি সমাধান করুন (কোন পরিবর্তনগুলি রাখতে হবে তা চয়ন করুন), তারপর সমাধান করা ফাইল। একীভূত হওয়ার জন্য,
. একটি পুনর্বাসনের জন্য,git add. তারপর ধাক্কা।git commitপ্রশ্নঃ আমি কিভাবে ভবিষ্যতে এই ত্রুটি এড়াতে পারি?git rebase --continueউত্তর: আপনি কাজ শুরু করার আগে এবং ধাক্কা দেওয়ার আগে টানুন। কে কি কাজ করছে সে সম্পর্কে আপনার দলের সাথে যোগাযোগ করুন। সক্রিয় ভাগ করা শাখাগুলিতে, বর্তমান থাকতে এবং বিচ্যুতি কমাতে ঘন ঘন টানুন।
উপসংহার
নন-ফাস্ট-ফরোয়ার্ড পুশ প্রত্যাখ্যান মানে রিমোট এমন প্রতিশ্রুতি দিয়েছে যা স্থানীয়ভাবে আপনার কাছে নেই — গিট আপনার পুশকে ব্লক করে সেই কমিটগুলিকে রক্ষা করে। সমাধান সহজ:
আগে দূরবর্তী পরিবর্তনগুলি টানুন ( || . ভাগ করা শাখায় জোর করে চাপ দেবেন না – এটি অন্যের কাজকে ধ্বংস করে। আপনি যদি আপনার নিজস্ব বৈশিষ্ট্য শাখা ওভাররাইট করতে হয়, তাহলে
ব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।ব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।git pullব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।git pull --rebaseব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।ব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।--force-with-leaseব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।--forceব্যবহার করুন৷ (এর চেয়ে নিরাপদ ) এই ত্রুটি এড়াতে, ঘন ঘন টানুন এবং আপনার দলের সাথে যোগাযোগ করুন। গিট যে প্রতিশ্রুতিগুলিকে রক্ষা করছে তা আপনি দেখেননি তা বোঝার জন্য সমাধানকে স্বজ্ঞাত করে তোলে: দূরবর্তী কাজকে একীভূত করুন, তারপরে চাপ দিন।
🔗 Share this article
✍️ Leave a Comment