মিস করা ফাইল অন্তর্ভুক্ত করার জন্য অতীত প্রতিশ্রুতিটি কীভাবে পরিবর্তন করবেন?


98

আমি একটি পরিবর্তন প্রতিশ্রুতিবদ্ধ করেছি এবং পরিবর্তন সেটে একটি ফাইল যুক্ত করতে ভুলে গেছি। অন্যান্য কমিট করার পরে, আমি বুঝতে পারি যে ফাইলটি এখন কোনও HEAD^4কমিট থেকে হারিয়ে যাচ্ছে ।

অনুপস্থিত ফাইলটি অন্তর্ভুক্ত করার জন্য আমি কীভাবে পূর্বের প্রতিশ্রুতি পুনর্লিখন করব?


আপনি এই 4 টি কমিট ঠেকিয়েছেন?
এমভিপি

@ এমভিপি না, তারা কেবলমাত্র আমার স্থানীয় গিট সংগ্রহস্থলে রয়েছে।
কল্রি 16'13

উত্তর:


54

ব্যবহারের git rebase --interactive HEAD~4এবং সেট editজন্য বিকল্প কমিট আপনি সংশোধন করতে চাই।

মনে রাখবেন যে আপনাকে এইভাবে দূরবর্তী সংগ্রহস্থলীতে চালিত কমান্ডগুলি সংশোধন করা উচিত নয় । সেক্ষেত্রে নিখোঁজ ফাইল সহ একটি নতুন প্রতিশ্রুতি যুক্ত করা ভাল।


ধন্যবাদ আমি কি রিমোট রেপোর একমাত্র ব্যবহারকারী হয়ে থাকলেও কি এই মামলা? git push -fআমি নিশ্চিত যে প্রবাহটি পরিবর্তিত হয়নি তা কি আমাকে কাজ করতে দিবে না?
কল্রি 16'13

4
আপনি যদি রিমোট রেপোর একমাত্র ব্যবহারকারী হন তবে জোর করে ধাক্কা দেওয়া ঠিক হবে ok
রাফাł রাউকি

7
আমি মনে করি এই নির্দেশাবলী যথেষ্ট বিশদ নয়। প্রথমবার চেষ্টা করার পরে আমি বললাম "পুনরায় চালু করতে পারবেন না: আপনার সূচীতে অনির্দিষ্ট পরিবর্তন রয়েছে।" আমি ইতিমধ্যে addনিখোঁজ হওয়া ফাইলগুলিকে উত্সাহিত করেছি, তাই আমি বার্তা হিসাবে "xxx" এর সাথে প্রতিশ্রুতিবদ্ধ করেছি। তারপরে আমি রিবেস কমান্ডটি করেছি এবং "এক্সএক্সএক্স" কমিটকে "পিক" থেকে "সম্পাদনা" এ পরিবর্তন করেছি। তারপরে আমি "গিট রিবেস - কনটিনিউ" করলাম। এখন যখন আমি ইতিহাসটি দেখি তখন আমার কাছে সর্বশেষ প্রতিশ্রুতি হিসাবে "xxx" রয়েছে এবং পূর্বের প্রতিশ্রুতি আমি এগুলিতে যুক্ত করতে চেয়েছিলাম তা অপরিবর্তিত! আমি ভাবছি আমার ভুলটা কোথায় ছিল?
ড্যারেন কুক

4
শেষ প্রতিশ্রুতি স্কোয়াশ করা ফাইলটি HEAD ~ 4 এ রাখবে না।
জাস্টিন

4
গিট অ্যাডিটেড ফাইলস; গিট কমিট - এম "ব্লাহ"; গিট রিবেস -i হেড ~ 5; // যেমন এখন নতুন প্রতিশ্রুতি যুক্ত করা হয়েছে তাই এখন আমাদের 4-এর পরিবর্তে 5 দিয়ে রিবেস করা দরকার এখন এখন "ব্লাহ" কমিটিকে দ্বিতীয় লাইনে স্থানান্তরিত করুন এবং এটিকে "পিক" থেকে "এস" (স্কোয়াশ) এ পরিবর্তন করুন যা এইচআইডি with এর সাথে প্রতিশ্রুতি স্কোয়াশ করবে will 5 হিসাবে কমান্ডগুলি উপর থেকে নীচে পর্যন্ত কার্যকর করা হয়
zstring

278

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

আপনি প্রতিশ্রুতিবদ্ধ এবং বুঝতে পারছেন যে আপনি তত্ক্ষণাত কিছু ফাইল যুক্ত করতে ভুলে গেছেন , কেবলমাত্র:

# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit

# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit

যেখানে --no-editএকই প্রতিশ্রুতি বার্তা রাখবেন।

সহজ কিছু!



5
উল্লেখযোগ্য, কমিটগুলি যদি রিমোটে ঠেলা না যায়।
রাম পাত্র

4
হ্যাঁ, এখানে মন্তব্যে এটি উল্লেখযোগ্য: এটি পুশ করার আগে ব্যবহারের জন্য । এটি নির্দেশ করার জন্য ধন্যবাদ।
ডারবেকো

4
এক যে বিজ্ঞপ্তি আগে ও করে পরে --amendআছে বিভিন্ন হ্যাশ
sonlexqt

6
ধন্যবাদ, তবে এটি হতে পারে না: ওপি চেয়েছিল HEAD^4। এটি ঠিক ঠিক যেমন রেফারেন্সের জন্য একটি সংযোজন। ;)
DrBeco

11

আপনি যদি এই 4 টি প্রতিশ্রুতি না ঠেলে থাকেন তবে আপনি নীচে এটি করতে পারেন:

এই সমস্ত কমিটের জন্য প্যাচ ফাইলগুলি তৈরি করুন:

git format-patch -4

4 টি কমিট করে রিওয়াইন্ড করুন:

git reset --hard HEAD~4

অনুপস্থিত ফাইল যুক্ত করুন:

git add missing-file

এটি দিয়ে প্রতিশ্রুতিবদ্ধ --amend:

git commit --amend

সমস্ত সংরক্ষিত প্যাচগুলি আবার প্রয়োগ করুন:

git am *.patch

আপনি যদি ধাক্কা দিয়ে থাকেন তবে আপনার এই পদ্ধতিটি ব্যবহার করা উচিত নয়। পরিবর্তে, কেবল আপনার ত্রুটি স্বীকার করুন এবং HEAD শীর্ষে আরও একটি প্রতিশ্রুতি তৈরি করুন যা এই সমস্যাটিকে সংশোধন করে।


আপনি যদি এই ধাপে ধাপে করতে চান তবে পরিবর্তিতটির পরে চেরি-পিক কমিটগুলি প্যাচ হিসাবে রফতানি করা সহজ।
রাফা রাউকি

4
এটি স্বাদের বিষয়। আমি পছন্দ করি git format-patch/ git amআরও ভাল। সর্বাধিক গুরুত্বপূর্ণ এটি যদি আপনি কিছু আঁকেন তবে এটি আপনাকে আরও আত্মবিশ্বাস দেয় - ফিজিক্যাল ফাইলে প্যাচ হিসাবে সংরক্ষণ করা প্রতিশ্রুতি আপনার সেরা সুরক্ষা জাল।
এমভিপি

আসল আত্মবিশ্বাস আসলেই থাকে, গিট রিপোজিটরিতে কাজ করার সময় আপনি কখনই কোনও জিনিস মুছবেন না। আপনি চালানো git gcনা হওয়া পর্যন্ত পুরানো
কমিটগুলি

এটি আপনার এবং আমার পক্ষে তুচ্ছ এবং সুস্পষ্ট। তবে, যে ব্যবহারকারী সবে শুরু করছেন এবং সম্ভবত গিট সম্পর্কে কিছুই বুঝতে পারেন না - এই ঘটনাটি মোটেই সুস্পষ্ট নয়।
এমভিপি

4
এই নির্দেশাবলী দীর্ঘ-বায়ুযুক্ত মনে হয়েছিল, তবে এটি বেশ সহজ এবং অনুসরণ করা সহজ। ধন্যবাদ (আমি কেবল একটি চূড়ান্ত পদক্ষেপ যুক্ত করব rm *.patch:)
ড্যারেন কুক

9

যদিও গৃহীত উত্তরটি সঠিক, যদিও এটি একটি পুনর্বাসনের প্রক্রিয়া চলাকালীন কোনও প্রতিশ্রুতি সম্পাদনা সম্পাদন করতে পারে সে সম্পর্কে বিস্তারিত নির্দেশাবলীর অভাব রয়েছে।

  • প্রথমে একটি রিবেস প্রক্রিয়া শুরু করুন:

    git rebase --interactive HEAD~4
    
  • করে একটি তালিকা উপস্থাপন করা হবে একটি কমিট সম্পাদনা করতে চান শব্দ পরিবর্তন করে চয়ন pickকরতে editএবং ফাইল সংরক্ষণ করুন।

  • আপনার কোডে প্রয়োজনীয় পরিবর্তন করুন ( git addনতুন ফাইলের জন্য অনুরোধ করতে ভুলবেন না )

  • সমস্ত পরিবর্তন হয়ে যাওয়ার পরে, ইস্যু করুন git commit --amend- এটি হিসাবে চিহ্নিত একটি প্রতিশ্রুতি সংশোধন করবেedit

  • আমন্ত্রণ করুন git rebase --continueযা প্রক্রিয়াটি শেষ করবে (যদি আরও কমিটস হিসাবে চিহ্নিত থাকে editতবে উপরের পদক্ষেপগুলি পুনরাবৃত্তি করা দরকার)

গুরুত্বপূর্ণ নোট:

  • pickআপনি যে সম্পাদনা করতে চান না সে হিসাবে চিহ্নিত লাইনগুলি সরিয়ে ফেলবেন না - তাদের যেমন রয়েছে তেমন ছেড়ে যান। এই লাইনগুলি মোছার ফলে সম্পর্কিত কমিটগুলি মুছে ফেলা হবে

  • stashআপনার কার্যনির্বাহী ডিরেক্টরিটি পরিষ্কার না হলে জিআইটি আপনাকে রিবাইজ করার আগে বাধ্য করে ; তবে আপনি git stash pop / git stash applyরিবেস চলাকালীন সময়ে, এই পরিবর্তনগুলি সংশোধন করতে (অর্থাত্ রিবেস প্রক্রিয়া শুরু করার আগে স্ট্যাশড পরিবর্তনগুলি) হিসাবে চিহ্নিত একটি প্রতিশ্রুতি হিসাবেedit

  • যদি কিছু ভুল হয়ে যায় এবং আপনি রিবেস প্রক্রিয়াটি শেষ হওয়ার আগেই করা পরিবর্তনগুলি ফিরিয়ে আনতে চান (যেমন আপনি রিবেস শুরু করার আগে পয়েন্টটিতে ফিরে যেতে চান) git rebase --abort- এইটিও পড়ুন: যদি ইন্টারঅ্যাক্টিভ রিবেস বাতিল করতে হয় তবে --abort না কাজ?

  • গৃহীত উত্তরে যেমন বলা হয়েছে:

    মনে রাখবেন যে আপনাকে এইভাবে দূরবর্তী সংগ্রহস্থলীতে চালিত কমান্ডগুলি সংশোধন করা উচিত নয়। সেক্ষেত্রে নিখোঁজ ফাইল সহ একটি নতুন প্রতিশ্রুতি যুক্ত করা ভাল।

    এর উত্তরটি গিট বুকটিতে রয়েছে ( " রিবসিংয়ের বিপদ " শিরোনামে অনুচ্ছেদ ):

    আপনার ভাণ্ডারের বাইরে বিদ্যমান প্রতিশ্রুতিগুলি রিবেস করবেন না।

    আপনি যদি সেই নির্দেশিকাটি অনুসরণ করেন তবে আপনি ভাল থাকবেন। আপনি যদি তা না করেন তবে লোকেরা আপনাকে ঘৃণা করবে এবং আপনাকে বন্ধুরা এবং পরিবারগুলি উপহাস করবে।

    আপনি স্টাফ রিবেস করার সময়, আপনি বিদ্যমান প্রতিশ্রুতিগুলি ত্যাগ এবং একইরকম তবে পৃথক নতুন একটি তৈরি করছেন। আপনি যদি অন্য কোথাও প্রতিশ্রুতিবদ্ধ হন এবং অন্যরা সেগুলি নীচে টানেন এবং তাদের উপর ভিত্তি করে কাজ করেন এবং তারপরে আপনি সেই কমিটগুলি গিট রিবেস দিয়ে পুনরায় লিখে আবার চাপিয়ে দেন, আপনার সহযোগীরা তাদের কাজটি পুনরায় একীভূত করতে হবে এবং আপনি চেষ্টা করার সময় জিনিসগুলি অগোছালো হয়ে যাবে will তাদের কাজটি আপনার মধ্যে আবার টানুন।

    [...]

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