git - আমি একটি গিট কমিট মুছে ফেলতে কিন্তু পরিবর্তন রাখতে পারেন




undo git-reset (6)

Git 2.9 ব্যবহার করে (অবিকল 2.9.2.windows.1) জিট git reset HEAD^ আরো জন্য অনুরোধ করে; এখানে ইনপুট প্রত্যাশিত কি নিশ্চিত না। স্ক্রিনশট নিচে পড়ুন দয়া করে

অন্য সমাধান git reset HEAD~#numberOfCommits ব্যবহার করে আমরা স্থানীয় পরিবর্তনগুলির সংখ্যা নির্বাচন করতে চয়ন করতে পারি যা আপনি আপনার পরিবর্তনগুলিকে অক্ষত রেখে পুনরায় সেট করতে চান। অতএব, আমরা সমস্ত স্থানীয় কমিটি পাশাপাশি সীমিত সংখ্যক স্থানীয় কমিটগুলি নিক্ষেপ করার সুযোগ পাই।

স্ক্রিনশটগুলি নীচে git reset HEAD~1 দেখানো git reset HEAD~1 নীচের ক্রিয়াটি পড়ুন:

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

এখন আমি আমার ডেভেলপমেন্ট শাখাতে ডেমো দিয়ে কাজ করেছি এবং আমার বিকাশ শাখায় কাজ করার জন্য, আমি যে "অস্থায়ী কমিট" তৈরি করেছি তা আমি এখনও তৈরি করা পরিবর্তনগুলিকে সংরক্ষণ করার সময় মুছে ফেলতে চাই। এটা কি সম্ভব?


Zsh ব্যবহার যারা জন্য, আপনি নিম্নলিখিত ব্যবহার করতে হবে:

git reset --soft HEAD\^

এখানে ব্যাখ্যা করা হয়েছে: https://github.com/robbyrussell/oh-my-zsh/issues/449

যদি ইউআরএল মারা যায় তবে গুরুত্বপূর্ণ অংশটি হল:

আপনার কমান্ড ^ এ Escape

আপনি বিকল্পভাবে শিরোনাম ব্যবহার করতে পারেন ~ যাতে আপনি প্রতিটি সময় এটি পালাতে হবে না।


আমি আপনি এই খুঁজছেন হয়

git reset --soft HEAD~1

স্টেজিং যে প্রতিশ্রুতি তৈরি করা পরিবর্তন রাখা যখন এটি সবচেয়ে সাম্প্রতিক কমিটি undoes।


এই পরিচালনার দুটি উপায় আছে। যা সহজ আপনার পরিস্থিতির উপর নির্ভর করে

রিসেট

যদি আপনি যে কাজটি থেকে পরিত্রাণ পেতে চান সেটি শেষ কমিট ছিল, এবং আপনি কোন অতিরিক্ত কাজ করেননি তবে আপনি কেবল git-reset ব্যবহার করতে পারবেন

git reset HEAD^

আপনার বর্তমান শাখার ঠিক আগে আপনার শাখা ফিরে কমিট নেয়। যাইহোক, এটি আসলে আপনার কাজের গাছের ফাইলগুলি পরিবর্তন করে না। ফলস্বরূপ, যে কমিটিতে পরিবর্তনগুলি সংশোধন হিসাবে দেখানো হয়েছে - এটি একটি 'অসামান্য' কমান্ডের মত। আসলে, আমি ঠিক আছে যে একটি উপনাম আছে।

git config --global alias.uncommit 'reset HEAD^'

তারপর আপনি একটি কমিট ব্যাক আপ ভবিষ্যতে git uncommit ব্যবহার করতে পারেন।

স্কোয়াশ করা

একটি কমিট squashing এক বা দুই মধ্যে আরো commits মিশ্রন মানে। আমি বেশ প্রায়ই এই কাজ। আপনার ক্ষেত্রে আপনার অর্ধেক সম্পন্ন বৈশিষ্ট্য রয়েছে, এবং তারপরে আপনি এটি শেষ করতে এবং সঠিক, স্থায়ী কমিটির বার্তাটি পুনরায় প্রেরণ করুন।

git rebase -i <ref>

আমি উপরে বলছি কারণ আমি এটা পরিষ্কার করতে চাই যে এটি কোনও সংখ্যা ফিরে আসতে পারে। git log চালান এবং আপনি যেটি থেকে মুক্ত হতে চান তা খুঁজুন, এটির SHA1 অনুলিপি করুন এবং এটির পরিবর্তে এটি ব্যবহার <ref> । গিট ইন্টারেক্টিভ রিবেস মোডে আপনি নিতে হবে। এটি আপনার বর্তমান অবস্থা এবং আপনি যে কোনও স্থানে যা রেখেছেন তার মধ্যে সমস্ত মতামত দেখাবে। সুতরাং যদি 10 বার আগে হয়, তাহলে এটি আপনাকে 10 টিটি দেখাবে।

প্রতিটি কমিটির সামনে, শব্দটি pick । আপনি পরিত্রাণ পেতে চান কমিট খুঁজুন এবং fixup বা squash pick থেকে এটি পরিবর্তন করুন। fixup ব্যবহার করে কেবল বার্তাটি মেনে চলে এবং তালিকার তার অবিলম্বে পূর্বসূরীগুলির মধ্যে পরিবর্তনগুলিকে fixup করে। squash কীওয়ার্ড একই জিনিস করে, কিন্তু আপনি নতুন যৌথ কমিটির প্রতিশ্রুতি বার্তা সম্পাদনা করতে পারবেন।

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

সতর্কতা:

রিবাজিং ইতিহাস পরিবর্তন - আপনি অন্য ডেভেলপারদের সাথে ইতিমধ্যে ভাগ করে নেওয়ার যে কোনও কাজ করতে এটি করবেন না।

Stashing

ভবিষ্যতে, এই সমস্যা এড়ানোর জন্য অস্থায়ীভাবে অস্বাভাবিক কাজ সংরক্ষণ করতে git stash ব্যবহার করে বিবেচনা করুন।

git stash save 'some message'

এটি আপনার স্ট্যাশ তালিকার পাশে আপনার বর্তমান পরিবর্তনগুলি সংরক্ষণ করবে। উপরে স্ট্যাশ কমান্ডের সবচেয়ে সুস্পষ্ট সংস্করণটি, যা আপনি স্ট্যাশ করছেন তা বর্ণনা করার জন্য একটি মন্তব্য করার অনুমতি দেয়। আপনি কেবল git stash এবং অন্য কিছু ছাড়াও চালাতে পারেন তবে কোনও বার্তা সংরক্ষণ করা হবে না।

আপনি আপনার স্ট্যাশ তালিকা ব্রাউজ করতে পারেন ...

git stash list

এটি আপনাকে আপনার সমস্ত স্ট্যাশগুলি, কোন শাখায় এটি করা হয়েছিল এবং বার্তাটি এবং প্রতিটি লাইনের শুরুতে এবং সেই স্ট্যাশের শনাক্তকারী যা [email protected]{#} স্ট্যাশের অ্যারেতে অবস্থান করছে তার জন্য এটি চিহ্নিত করবে। ।

স্ট্যাশ পুনরুদ্ধার করতে (কোন শাখায় যা করা যেতে পারে, স্ট্যাশটি মূলত কোথায় তৈরি হয়েছিল তা নির্বিশেষে) আপনি কেবল চালান ...

git stash apply [email protected]{#}

আবার, সেখানে # স্ট্যাশ অ্যারের মধ্যে অবস্থান। যদি আপনি যে স্ট্যাশটি পুনরুদ্ধার করতে চান তা হল 0 পদে - অর্থাৎ এটি যদি সাম্প্রতিকতম স্ট্যাশ হয়। তারপর আপনি কেবল স্ট্যাশ পজিশন নির্দিষ্ট না করেই কমান্ডটি চালাতে পারেন, git অনুমান করবে যে আপনি git stash apply : git stash apply

সুতরাং, উদাহরণস্বরূপ, যদি আমি নিজেকে ভুল শাখায় কাজ করি - আমি নিম্নোক্ত কমান্ডগুলি চালাতে পারি।

git stash
git checkout <correct_branch>
git stash apply

আপনার ক্ষেত্রে আপনি একটু বেশি শাখাগুলির দিকে সরে গেলেন, তবে একই ধারণাটি এখনও প্রযোজ্য।

আশাকরি এটা সাহায্য করবে.


এটা করার আরেকটি উপায়।

অস্থায়ী কমিটির শীর্ষে কমিটি যোগ করুন এবং তারপর করুন:

git rebase -i

এক মধ্যে দুটি commits একত্রিত (কমান্ড স্পষ্ট নির্দেশাবলী সঙ্গে টেক্সট ফাইল খুলবে, এটি সম্পাদনা)।


হ্যাঁ, আপনি পরিবর্তনগুলি মুছে ফেলার পরে আপনার কমিটিটি মুছতে পারেন: জিট রিসেট @ ~





git-reset