গিট: পুশ করার পরে প্রতিশ্রুতিবদ্ধ ফাইল সরান


113

গিটে প্রতিশ্রুতিবদ্ধ ফাইলটি ফেরত দেওয়ার কোনও সম্ভাবনা আছে কি? আমি গিটহাবের কাছে একটি প্রতিশ্রুতিবদ্ধ করেছি এবং তখন আমি বুঝতে পারি যে এমন একটি ফাইল আছে যা আমি ধাক্কা দিতে চাই না (আমি পরিবর্তনগুলি শেষ করি না)।


4
আপনি কি ধাক্কা দেওয়ার পরে গিটহাব থেকে পুরোপুরি ফাইলটি সরাতে চান? অন্যথায় আপনি কেবল: গিট আরএম <ফাইল>, গিট পুশ।
rdrmntn


উত্তর:


153

আপডেট: নিরাপদ পদ্ধতি যুক্ত করা হয়েছে

পছন্দসই পদ্ধতি:

  1. আপনার ফাইলের পূর্ববর্তী (অপরিবর্তিত) অবস্থাটি পরীক্ষা করে দেখুন; ডাবল ড্যাশ লক্ষ্য করুন

    git checkout HEAD^ -- /path/to/file
    
  2. এটি প্রতিশ্রুতিবদ্ধ:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. এটি ধাক্কা, কোন বাহিনী প্রয়োজন:

    git push
    
  4. আপনার অসমাপ্ত কাজ ফিরে পেতে, আবার (3 বার তীর আপ):

    git checkout HEAD^ -- /path/to/file
    

কার্যকরভাবে 'আপত্তিহীন':

আপনার দুর্ঘটনাক্রমে ধাক্কা দেওয়া কাজটি উদ্বোধন করে, সংগ্রহশালার হেডের শেষ প্রতিশ্রুতিটি সংশোধন করার জন্য, আপনার সহকর্মীর সাথে সংঘাতের দিকে ঝুঁকছেন, যিনি ইতিমধ্যে এটি টানতে পেরেছেন, এবং যিনি ধূসর চুল গজিয়ে উঠবেন এবং তার স্থানীয় শাখার প্রধানের সাথে পুনর্মিলন করার চেষ্টা করতে গিয়ে অনেক সময় হারাবেন কেন্দ্রীয় এক সঙ্গে:

শেষ প্রতিশ্রুতি থেকে ফাইল পরিবর্তন সরাতে:

  1. শেষ প্রতিশ্রুতি দেওয়ার আগে ফাইলটিকে রাজ্যে ফিরিয়ে আনতে, করুন:

    git checkout HEAD^ /path/to/file
    
  2. রিভার্ট করা ফাইলটির সাথে শেষ প্রতিশ্রুতি আপডেট করতে, করুন:

    git commit --amend
    
  3. রেপোতে আপডেট করা প্রতিশ্রুতি ঠেলে, করুন:

    git push -f
    

সত্যিই, আগে উল্লিখিত পছন্দসই পদ্ধতিটি ব্যবহার করে বিবেচনা করুন।


4
আপনি যদি কোনও প্রকল্পের একমাত্র বিকাশকারী না হন তবে আপনার সত্যিই গিট পুশ-ফ ব্যবহার করা উচিত নয়। এটি এর মূল্য হিসাবে আরও বেশি সমস্যা তৈরি করে। কেবল ফাইলটি সরিয়ে দিন তারপরে একটি নতুন অঙ্গীকার করুন।
সমৃদ্ধ

4
@ user553086 আরও সম্মত হতে পারে না। ভাল এখন?
xor

ইতিহাসে আরও কমিট করে কি এই করণীয়? উদাহরণস্বরূপ আমি কি এই সাথে করতে পারি git checkout HEAD~2 /path/to/file? সম্পাদনা করুন: দেখে মনে হচ্ছে আমি আমার ক্ষেত্রে যা চেয়েছিলাম তা সহজ ছিলgit rm /path/to/file
স্টারসক্রিম_ডিসকো_পার্টি

4
আপনি আমাকে মাত্র 4 ঘন্টা বাঁচিয়েছেন ভাই!
তোসিন অনিকুট

58

আপনি যদি রিমোট রেপো থেকে ফাইলটি সরাতে চান তবে প্রথমে এটি আপনার প্রকল্প থেকে --cache বিকল্পের সাথে সরিয়ে ফেলুন এবং তারপরে এটি চাপ দিন:

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(কিছুটা আগে এই ফাইলটি রিমোট রেপোতে যুক্ত করা হলেও এটি কাজ করে) আপনি যে ফাইল এক্সটেনশানগুলি চাপতে চান না সেটিকে .gitignore এ যুক্ত করতে ভুলবেন না।


4
এটি এই প্রতিশ্রুতি থেকে ফাইলগুলি ফরোয়ার্ড করে না, তবে পুরানো কমিটগুলির মধ্যে ফাইলগুলি এখনও দৃশ্যমান।
কেন

30

আপনি কেবলমাত্র একটি ফাইল একটি নির্দিষ্ট সংশোধনীতে ফিরিয়ে দিতে পারবেন।

প্রথমে আপনি যা ফাইলটি পরিবর্তন হয়েছিল তা পরীক্ষা করে দেখতে পারেন।

git log path/to/file.txt

তারপরে আপনি রিভিশন নম্বর দিয়ে ফাইলটি চেকআউট করতে পারেন।

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

এর পরে আপনি প্রতিশ্রুতিবদ্ধ এবং এটি আবার ধাক্কা দিতে পারেন।


7

সঠিক অবস্থায় ফাইলটি রিসেট করুন, প্রতিশ্রুতিবদ্ধ করুন এবং আবার চাপ দিন।

আপনি যদি নিশ্চিত হন যে অন্য কেউ এখনও আপনার পরিবর্তনগুলি এনেছে না, আপনি --amendপ্রতিশ্রুতি দেওয়ার সময়, আপনার পূর্ববর্তী প্রতিশ্রুতি (অর্থাত্ পুনর্লিখনের ইতিহাস) সংশোধন করতে এবং এরপরে চাপ দিতে পারেন। আমি মনে করি -fধাক্কা দেওয়ার সময় আপনাকে বিকল্পটি ব্যবহার করতে হবে , ধাক্কা দিতে বাধ্য করতে, যদিও।


4
  1. সর্বশেষ কমিটের হ্যাশ কোডটি পান।

    • git log
  2. প্রতিশ্রুতি ফিরিয়ে দিন
    • git revert <hash_code_from_git_log>
  3. পরিবর্তনগুলি ধাক্কা
    • git push

জিএইচআর পরীক্ষা করে দেখুন। আপনি যা প্রয়োজন কখনও তা পেতে পারেন, আশা করি আপনি এটি দরকারী

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