git - what - গিট বা পর্ব কি




গিট কমিট থেকে ফাইল সরান (14)

আমি গিট ব্যবহার করছি এবং আমি ব্যবহার করে কয়েক ফাইল করেছি

git commit -a

পরবর্তীতে, আমি দেখেছি যে একটি ফাইলটি ভুলভাবে জমা দেওয়া হয়েছে।

কিভাবে আমি সর্বশেষ কমিটি থেকে একটি ফাইল মুছে ফেলতে পারি?


আপনি যদি আপনার প্রতিশ্রুতি সংরক্ষণ করতে চান (হয়তো আপনি ইতিমধ্যে একটি বিস্তারিত প্রতিশ্রুতি বার্তা লিখতে কিছু সময় ব্যয় করেছেন এবং এটি হারাতে চান না), এবং আপনি শুধুমাত্র কমিটি থেকে ফাইলটি সরাতে চান, তবে সম্পূর্ণরূপে সংগ্রহস্থল থেকে:

git checkout origin/<remote-branch> <filename>
git commit --amend

আপনি সার্ভারে পরিবর্তনগুলি ধাক্কা দিলে আপনি ব্যবহার করতে পারেন

git reset --soft HEAD~1

এটি সমস্ত পরিবর্তন রিসেট করবে এবং একটিকে ফেরত পাঠাবে

আপনি যদি আপনার পরিবর্তনগুলি ধাক্কা দেন তবে @ চার্সবি দ্বারা উত্তর হিসাবে পদক্ষেপগুলি অনুসরণ করুন


আমি উদাহরণ দিয়ে আপনি ব্যাখ্যা করবে।
এ, বি, সি 3 ক্রমবর্ধমান commits করা যাক। Commit B একটি ফাইল রয়েছে যা প্রতিশ্রুতিবদ্ধ করা উচিত নয়।

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    

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

git reset --soft HEAD^ 

অথবা

git reset --soft HEAD~1

তারপর অবাঞ্ছিত ফাইলগুলি রিমোট থেকে তাদের ছেড়ে দেওয়ার জন্য পুনরায় সেট করুন:

git reset HEAD path/to/unwanted_file

এখন আবার কমিট করুন, আপনি একই প্রতিশ্রুতি বার্তা পুনরায় ব্যবহার করতে পারেন:

git commit -c ORIG_HEAD  

একই সমস্যা ছিল যেখানে আমি একটি স্থানীয় শাখাতে পরিবর্তন করেছি যেখানে আমি কেবল একটি ফাইল প্রত্যাহার করতে চেয়েছিলাম। আমার জন্য কি কাজ ছিল -

(নীচের বৈশিষ্ট্য / target_branch যেখানে আমার সমস্ত পরিবর্তন রয়েছে যার মধ্যে আমি একটি নির্দিষ্ট ফাইলটি পূর্বাবস্থায় ফেরানোতে চাই)

( মূল / বৈশিষ্ট্য / target_branch রিমোট শাখা যেখানে আমি আমার পরিবর্তনগুলি ধাক্কা দিতে চাই)

( বৈশিষ্ট্য / স্টেজিং আমার অস্থায়ী স্টেজিং শাখা যেখানে আমি আমার সমস্ত চেয়েছিলেন পরিবর্তনগুলি থেকে এক ফাইলের পরিবর্তন বাদ দিয়ে ধাক্কা দিচ্ছি)

  1. আমার মূল / বৈশিষ্ট্য / target_branch থেকে একটি স্থানীয় শাখা তৈরি করুন - এটি বৈশিষ্ট্য / স্টেজিং বলা হয়

  2. বৈশিষ্ট্য / স্টেজিং শাখায় আমার কার্যকরী স্থানীয় শাখা বৈশিষ্ট্য / target_branch মার্জ করুন

  3. চেক আউট বৈশিষ্ট্য / স্টেজিং তারপর গিট রিসেট - সফট ORIG_HEAD (এখন বৈশিষ্ট্য / স্টেজিং থেকে সমস্ত পরিবর্তন 'মঞ্চায়িত হবে কিন্তু অসামান্য।)

  4. অপ্রয়োজনীয় পরিবর্তনগুলি সহ আমি পূর্বে যে ফাইলটি পরীক্ষা করেছি তা অস্থিতিশীল

  5. মূল / বৈশিষ্ট্য / target_branch থেকে বৈশিষ্ট্য / স্টেজিংয়ের জন্য আপস্ট্রিম শাখাটি পরিবর্তন করা হয়েছে

  6. স্টেজযুক্ত পরিবর্তন বাকি এবং আমার রিমোট মূল / বৈশিষ্ট্য / target_branch আপ আপস্ট ধাক্কা


এটি আমার জন্য বিট বাল্ট রেপ থেকে ফাইলটি সরাতে কাজ করে যা আমি শুরুতে শাখাতে ফাইলটিকে ধাক্কা দিয়েছি।

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

জিট GUI ব্যবহার করে পূর্ববর্তী কমিটি থেকে একটি ফাইল সরানো সহজ করতে পারেন।

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

git gui citool --amend

আপনি ভুলভাবে সংঘটিত ফাইলটি অ-চেক করতে পারেন এবং তারপরে "Commit" ক্লিক করুন।

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


নিম্নলিখিত কমান্ডের একটি ক্রম করবেন:

//to remove the last commit, but preserve changes  
git reset --soft HEAD~1

//to remove unneded file from the staging area  
git reset HEAD `<your file>` 

//finally make a new commit  
git commit -m 'Your message'

প্রকৃতপক্ষে, আমি মনে করি গিট রিবেস ইন্টারেক্টিভ মোড ব্যবহার করা একটি দ্রুত এবং সহজ উপায়।

git rebase -i head~1  

(বা মাথা ~ 4, আপনি কতদূর যেতে চান)

এবং তারপরে, 'পিক' পরিবর্তে, 'সম্পাদনা' ব্যবহার করুন। আমি বুঝতে পারিনি কতটা শক্তিশালী 'সম্পাদনা'।

https://www.youtube.com/watch?v=2dQosJaLN18

আপনি এটি সহায়ক খুঁজে পেতে আশা করি।


বিদ্যমান উত্তর সব শেষ commit থেকে অবাঞ্ছিত ফাইল অপসারণ সম্পর্কে কথা বলা হয়।

যদি আপনি পুরানো কমিটির (এমনকি ধাক্কা) থেকে অযাচিত ফাইলগুলি সরাতে চান এবং ক্রিয়াটির কারণে একটি নতুন কমিটি, যা অপ্রয়োজনীয়, তৈরি করতে চান না:

1।

আপনি যে ফাইলটি কনফিগার করতে চান তা খুঁজুন।

git checkout <commit_id> <path_to_file>

আপনি যদি অনেক ফাইল মুছে ফেলতে চান তবে আপনি এটি একাধিক বার করতে পারেন।

2।

git commit -am "remove unwanted files"

3।

ফাইলটি ভুলভাবে যোগ করা হয়েছে এমন কমিটির commit_আইডি খুঁজুন, এখানে "35c23c2" বলুন

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

এই কমান্ড আপনার সেটিংস অনুযায়ী সম্পাদক খোলে। ডিফল্ট এক ভিম হয়।

ভুল প্রতিশ্রুতি (আমাদের ক্ষেত্রে "35c23c2") এর পরবর্তী লাইনে, "অযাচিত ফাইলগুলি সরান" যা শেষ কমিটটি সরান এবং ফিক্সআপ হিসাবে কমান্ডটি সেট করুন:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

আপনি ফাইল সংরক্ষণ করার পরে ভাল হতে হবে।

শেষ করা :

git push -f

আপনি দুর্ভাগ্যবশত দ্বন্দ্ব পেতে হলে, আপনি নিজে তাদের সমাধান করতে হবে।


যদি আপনি এই ফাইলটি আর প্রয়োজন না করেন তবে আপনি করতে পারেন

git rm file
git commit --amend
git push origin branch

শুধু একটি অতিরিক্ত কমান্ড চালানোর জন্য আমি উপরের উত্তর পরিপূরক চেয়েছিলেন:

git reset --soft HEAD^
git checkout origin/master <filepath>

চিয়ার্স!


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

এটি আপনার শেষ কমিট এবং আপনি আপনার স্থানীয় এবং দূরবর্তী সংগ্রহস্থলের ফাইলটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে আপনি এটি করতে পারেন:

  1. ফাইল git rm <file> মুছে ফেলুন
  2. পতাকা সংশোধন সঙ্গে কমিট: git commit --amend

সংশোধনের পতাকাটি আবার জবাব দেওয়ার জন্য গিটকে বলে, কিন্তু "একত্রিত" (দুটি শাখার বিনিময়ের অর্থে নয়) শেষ কমিটির সাথে এই অঙ্গীকারটি করে।

মতামত হিসাবে বিবৃত, এখানে git rm ব্যবহার করে rm কমান্ড নিজেই ব্যবহার করা হয়!


git checkout HEAD~ path/to/file
git commit --amend




git-commit