গিট রিমোট URL টি পরিবর্তন করার পরে রিমোট প্রত্যাখ্যান করা হয়েছে (অগভীর আপডেটের অনুমতি নেই)


164

আমার গিট সংস্করণ নিয়ন্ত্রণের অধীনে একটি প্রকল্প রয়েছে যা আমি একটি সার্ভার এবং আমার স্থানীয় কম্পিউটার উভয় ক্ষেত্রেই কাজ করেছি। আমি মূলত আমার স্থানীয় কম্পিউটার হিসাবে দূরবর্তী উত্স সেট করেছিলাম তবে আমি এখন এটি বিটবাকেটে পরিবর্তন করতে চাই।

সার্ভারে আমি কমান্ডটি ব্যবহার করেছি

git remote set-url origin bitbucket_address

তবে এখন যখন আমি আমার প্রকল্পটি ধাক্কা দেওয়ার চেষ্টা করি তখন ত্রুটিটি পাই

 ! [remote rejected] master -> master (shallow update not allowed)

কী কারণে এটি ঘটছে এবং আমি কীভাবে এটি ঠিক করব?


3
আপনি কীভাবে আপনার স্থানীয় সংস্করণটিকে ক্লোন করেছেন? git clone --depth?
সাসাা ওল্ফ

এটি কিছুক্ষণ আগে ছিল এবং আমি মনে করতে পারি না। খুঁজে বের করতে একটি উপায় আছে কি?
rwolst

2
shallowআপনার .gitফোল্ডারে একটি ফাইল থাকা উচিত ।
সাসাা ওল্ফ

হ্যাঁ, আমি একটি shallowফাইল দেখতে পারি ।
rwolst

একটি সমাধানের জন্য stackoverflow.com/a/50996201 দেখুন যা কেবল হারিয়ে যাওয়া ইতিহাসকে বাতিল করে দেয় (বা পুনর্লিখন)
কাও

উত্তর:


329

যেমনটি মনে হয় আপনি git clone --depth <number>নিজের স্থানীয় সংস্করণটি ক্লোন করতে ব্যবহার করেছেন । এর ফলে অগভীর ক্লোন তৈরি হয় । এই জাতীয় ক্লোনটির একটি সীমাবদ্ধতা হ'ল আপনি এটিকে কোনও নতুন ভাণ্ডারে ঠেলাতে পারবেন না ।

আপনার কাছে এখন দুটি বিকল্প রয়েছে:

  1. আপনি যদি বর্তমান বা অনুপস্থিত ইতিহাস সম্পর্কে চিন্তা না করেন তবে এই প্রশ্নটি একবার দেখুন
  2. আপনি যদি নিজের পূর্ণ ইতিহাস রাখতে চান তবে পড়া চালিয়ে যান:

সুতরাং, আপনি আপনার ইতিহাস রাখতে চান, তাই না? এর অর্থ হ'ল আপনাকে আপনার সংগ্রহশালাটি অপসারণ করতে হবে। এটি করার জন্য আপনাকে আবার আপনার পুরানো রিমোট যুক্ত করতে হবে।

git remote add old <path-to-old-remote>

এর পরে আমরা git fetchপুরানো রিমোট থেকে অবশিষ্ট ইতিহাস আনার জন্য ব্যবহার করি ( এই উত্তরে প্রস্তাবিত হিসাবে )।

git fetch --unshallow old

এবং এখন আপনি আপনার নতুন দূরবর্তী সংগ্রহস্থল মধ্যে পুশ করতে সক্ষম হওয়া উচিত।


দ্রষ্টব্য : আপনার ক্লোনটি ছড়িয়ে দেওয়ার পরে আপনি অবশ্যই পুরানো রিমোটটি আবার মুছে ফেলতে পারেন।


45
আমি যদি একটি কিক-স্টার্ট প্রকল্পটি ক্লোন করেছি এবং আমি পুরো ইতিহাসের প্রয়োজন / চাই না? এড়াতে কি উপায় আছে?
Itamar

9
@itamar এটি একটি নিখুঁত বৈধ নতুন প্রশ্নের জন্য একটি ভাল উদাহরণ বলে মনে হচ্ছে। আপনি রেফারেন্সের জন্য এই প্রশ্নের লিঙ্ক করতে পারে।
সাসাা ওল্ফ

14
নতুন প্রশ্ন যেমন জিজ্ঞাসিত stackoverflow.com/questions/29748197/...
ইটামার

2
দ্রষ্টব্য যে git fetch --unshallowপুরো রেপোর চেয়ে কেবল একটি নির্দিষ্ট শাখাকে সরিয়ে ফেলতে একটি রেসপেক নিতে পারে। উদাহরণস্বরূপ:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
15'15

5
আপনি যদি কোনও রেপোতে চাপ দিচ্ছেন যা আপনি সম্পূর্ণ নতুন রেপো তৈরি না করে যে রেপো থেকে ক্লোন করেছেন তার পিছনে কিছুটা হলেও, আপনার স্থানীয় রেফারেন্সটি দূরবর্তী রেফারেন্সটি ধারণ করার জন্য যথেষ্ট গভীর। তাই আপনি যদি আপনার origin/master20 করে আপনার সামনে রেখে ছিল oldrepo/masterযখন আপনি clone --depth 1এটা ed, এবং আপনি 17 স্থানীয় করে করেছেন যেহেতু, এটা যথেষ্ট আপনাকে যা করতে হবে জন্য git fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master(যে কোন বন্ধ-বাই-এক ত্রুটির জন্য ক্ষমা), এবং তারপর আপনি কি করতে পারেন git push oldrepo masterঘটনা ছাড়া (গিট 1.9.0 বা আরও নতুন প্রয়োজন হতে পারে)।
ক্লেক

28

যদি আপনার রেপো হয় originএবং মূল রেপো হয় upstream:

git fetch --unshallow upstream

এটি আমার পক্ষে কাজ করে এবং বেশ সহজ তবে শীর্ষে ভোট দেওয়া উত্তর।
মাওশেং ওয়াং

11

আপনি যদি অল্প অল্প অল্প সময়ের সাথে যুক্ত নতুন কমিটের সাথে রেপো রাখতে চান তবে আর একটি বিকল্প, প্রাথমিক প্রতিশ্রুতি হ'ল: একটি ইন্টারেক্টিভ রিবেস দিয়ে এই প্রতিশ্রুতি সংশোধন করুন

  • প্রথম (মূল) প্রতিশ্রুতি সহ একটি ইন্টারেক্টিভ রিবেস শুরু করুন

    git rebase --interactive --root
    
  • pickপ্রাথমিক প্রতিশ্রুতি (গুলি) এর পরিবর্তন করুন editএবং ফাইলটি সংরক্ষণ এবং বন্ধ করুন।

    যদি আপনি 1 এর চেয়ে বেশি গভীরতার সাথে রেপো ক্লোন করে থাকেন তবে আপনাকে এই সমস্ত কমিটের জন্য একই কাজ করতে হবে। বা, বিকল্পভাবে, fixupইন্টারেক্টিভ রিবেস চলাকালীন এই সমস্তগুলির জন্য নির্বাহ করুন ।

  • এই প্রতিশ্রুতিটি একটি নিয়মিত, অবিচ্ছিন্ন প্রতিশ্রুতিতে রূপান্তর করুন

    git commit --amend --no-edit
    

    এটি কমিট আইডিও পরিবর্তন করবে এবং আপনাকে এই প্রাথমিক প্রতিশ্রুতিতে সহ-লেখক হিসাবে যুক্ত করবে।

  • আপনার রিবেস শেষ করতে ভুলবেন না

    git rebase --continue
    

ধন্যবাদ! মন্ত্রের মতো কাজ করেছিল, যখন মূল সংগ্রহস্থলটি মুছে ফেলা হয়েছিল এবং আপনার কেবল এটির অগভীর অনুলিপি রয়েছে।
ভিটালি দিমিত্রিভ

9

আপনি যদি নতুন রেপোটিকে যেমনভাবে ঠেলাতে চান তবে আপনি এটি চেষ্টা করতে পারেন:

  • প্রথমে old git folderআপনার বর্তমান রেপো থেকে সরান ,sudo rm -rf .git
  • তারপরে আবার গিটটি শুরু করুন git init
  • তারপরে নতুন রিমোট রেপো যুক্ত করুন git remote add your-new-repo
  • তারপরে এটি পুশ করুন।

আমি এটি একটি আরও ভাল সমাধান খুঁজে পেয়েছি, যেহেতু এটির জন্য পুরানোদের ধাক্কা দেওয়ার দরকার নেই। কখনও কখনও এটি বয়লারপ্লেটগুলির সাথে ঘটতে পারে।
আরএনপিডি


@ নাচপিডি যখন আপনি বলছেন যে অন্য সমাধানটির জন্য "পুরানোদের দিকে ধাক্কা" দরকার হয় তবে আমি নিশ্চিত না আপনি কী বলতে চাইছেন তা নিশ্চিত নই @ আপনি কি ধাক্কা দেওয়ার পরিবর্তে আনছেন? কারণ এটির জন্য ধাক্কা দরকার হয় না।
সাসাা ওল্ফ

0

যদি আনয়ন - আনশলো কাজ করে না। আপনার শাখায় অবশ্যই কিছু সমস্যা আছে। এটি চাপ দেওয়ার আগে নিম্নলিখিত কমান্ড দিয়ে এটি ঠিক করুন।

git filter-branch -- --all

শুধুমাত্র --unshallow সঙ্গে এই কাজ একটি যেহেতু কাজ করে না নিরাপত্তা উদ্বেগ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.