git - গিট একটি শাখা থেকে কমিট মুছে দিন




git-rebase git-reset (18)

আমি একটি কমিটি মুছে ফেলতে কিভাবে জানতে চাই।

delete , আমার মনে হয় যেন আমি সেই অঙ্গীকারটি না করে থাকি, এবং যখন আমি ভবিষ্যতে ধাক্কা দিই, তখন আমার পরিবর্তন দূরবর্তী শাখায় পৌছাবে না।

আমি গিট সাহায্য পড়া, এবং আমি মনে করি কমান্ড আমি ব্যবহার করা উচিত মনে হয় - git reset --hard HEAD । এটা কি সঠিক?


Temp ফোল্ডারে আপনার কোড ব্যাকআপ নিন। নিম্নলিখিত কমান্ড সার্ভার হিসাবে একই পুনরায় সেট করা হবে।

git reset --hard HEAD
git clean -f
git pull

আপনি যদি আপনার পরিবর্তনগুলি রাখতে চান এবং সাম্প্রতিক কাজগুলি সরাতে চান

git reset --soft HEAD^
git pull

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

git reset HEAD~1

এই ফাইলগুলি স্টেজযুক্ত যে গিট অ্যাড কমান্ডের আগে এটি আপনার রিপোজিটরিটি তার অবস্থানে ফিরিয়ে দেবে। আপনার পরিবর্তন আপনার কাজের ডিরেক্টরি হতে হবে। মাথা ~ 1 শাখার বর্তমান টিপ নীচের কমিট বোঝায়।

যদি আপনি N Commits অস্বীকৃত করতে চান তবে আপনার কাজের নির্দেশিকাতে কোড পরিবর্তনগুলি রাখুন:

git reset HEAD~N

আপনি যদি আপনার সর্বশেষ কমিটির পরিত্রাণ পেতে চান এবং কোড পরিবর্তনগুলি রাখতে চান না তবে আপনি একটি "হার্ড" রিসেট করতে পারেন।

git reset --hard HEAD~1

একইভাবে, যদি আপনি শেষ এনটি বাতিল করতে চান এবং কোড পরিবর্তনগুলি রাখতে চান না:

git reset --hard HEAD~N

আপনি যদি সর্বশেষ প্রকাশটি অপসারণ করতে পরিবর্তনগুলি প্রকাশ না করেন তবে আপনি করতে পারেন

$ git reset --hard HEAD^

(মনে রাখবেন যে এটি সমস্ত অসংযত পরিবর্তনগুলিও মুছে ফেলবে; যত্ন সহকারে ব্যবহার করুন)।

যদি আপনি ইতিমধ্যেই মুছে ফেলার জন্য তৈরি কমিটিটি প্রকাশ করেন, তবে গিটটি প্রত্যাহার করুন

$ git revert HEAD

আপনি রিমোট রিপোজিটরিতে ধাক্কা দিচ্ছেন না বলে ধরেছেন, আপনি রিপোজিটরিটি পুনরায় ক্লোন করতে পারেন। এই কয়েকবার আমার পছন্দ পদ্ধতি হয়েছে।


আমি সাধারণত যখন আমি কমিট এবং ধাক্কা (যদি কেউ তার কমিট সমস্যা এই সমস্যার ধাক্কা):

git reset --hard HEAD~1

git push -f origin

এই সাহায্য আশা করি


আরেকটি সম্ভাবনা আমার ব্যক্তিগত প্রিয় কমান্ড এক:

git rebase -i <commit>~1

এই বিন্দুতে ইন্টারেক্টিভ মোডে -i বিন্দুতে বিন্দুটি শুরু করবে ঠিক সেই মুহূর্তে যা আপনি ভান করতে চান। সম্পাদক তখন থেকেই সমস্ত তালিকা তালিকা শুরু হবে। আপনি মুছে ফেলা এবং ফাইল সংরক্ষণ করতে চান কমিটি ধারণকারী লাইন মুছে দিন। Rebase বাকি কাজটি করবে, কেবলমাত্র সেটি মুছে ফেলবে এবং অন্য সকলকে আবার লগ ইন করতে হবে।


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

আমি চীনামাটির বাসন কমান্ড সঙ্গে একটি কমিট অপসারণ করার কোন উপায় আছে মনে হয়। একমাত্র উপায় লগ থেকে রিফ্রগ করতে এবং তারপরে একটি git prune --expire -now চালানোর জন্য।


এখানে এটি করার আরেকটি উপায়:

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

git reset --hard COMMIT_ID

যেহেতু আপনি দূরবর্তী থেকে আপনার শাখাটি চেক করেছেন, তাই আপনাকে হারানোর বিষয়ে কোনও স্থানীয় পরিবর্তন নেই। কিন্তু যদি আপনি এটা হারাতে হবে।

তারপরে আপনার সংগ্রহস্থলের স্থানীয় ডিরেক্টরির মধ্যে নেভিগেট করুন এবং এই কমান্ড চালান:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

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


গিট রিসেট - হার্ড

গিট ধাক্কা মূল মাথা --force

যদি এক বা একাধিক কাজ ট্যাগ করা হয় তবে প্রথমে ট্যাগটি মুছুন। অন্যথায় ট্যাগ করা কমিটি মুছে ফেলা হয় না।


বলুন আমরা রেপ থেকে 2 এবং 4 টি সীমাবদ্ধতা সরাতে চাই।

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

দ্রষ্টব্য: আপনি --hard এবং --hard ব্যবহার করছেন তারপরে আপনাকে --hard প্রশাসকের অধিকারগুলি থাকতে হবে

  • git checkout b3d92c5 শেষ ব্যবহারযোগ্য কমিট চেকআউট।
  • git checkout -b repair কাজ করার জন্য একটি নতুন শাখা তৈরি করুন।
  • git cherry-pick 77b9b82 কমিট মাধ্যমে চালান 3।
  • git cherry-pick 2c6a45b কমিট মাধ্যমে চালান 1।
  • git checkout master চেকআউট মাস্টার।
  • git reset --hard b3d92c5 ব্যবহারযোগ্য কমিট শেষ করতে মাস্টার পুনরায় সেট করুন।
  • git merge repair মাস্টার সম্মুখের আমাদের নতুন শাখা মার্জ।
  • git push -f origin master দূরবর্তী repo git push -f origin master ধাক্কা।

যদি আপনি ইতিমধ্যে ধাক্কা দিয়ে থাকেন, প্রথমে HEAD ($ GIT_COMMIT_HASH_HERE) এ থাকা কমিটিটি সন্ধান করুন , তারপরে নিম্নলিখিতটি চালান:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

তারপরে প্রতিটি স্থানে রেপো ক্লোন করা হয়েছে, চালানো হয়েছে:

git reset --hard origin/master

যদি আপনি ইতিহাসটি রাখতে চান, কমিট এবং রিভার্টটি দেখান, তাহলে আপনার ব্যবহার করা উচিত:

git revert GIT_COMMIT_HASH

আপনি কেন ফিরে আসছেন তা ব্যাখ্যা করে বার্তাটি প্রবেশ করুন এবং তারপরে:

git push  

যখন আপনি git log ইস্যু করেন তখন আপনি "ভুল" উভয়টি দেখতে পাবেন এবং লগ বার্তাগুলি প্রত্যাহার করতে পারবেন।


স্থানীয় শাখা উপর রিসেট করুন

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

মূল ধাক্কা ধাক্কা

git push -f origin

স্থানীয় শাখায় মুছে ফেলার জন্য ব্যবহার করুন

git reset --hard HEAD~1

দূরবর্তী শাখায় মুছে ফেলার জন্য ব্যবহার করুন

git push origin HEAD --force

আমি এই উত্তরটি যুক্ত করছি কারণ আমি দেখি না যে যে কেউ যে কাজ করার চেষ্টা করেছে সেটি যে সমস্ত কাজকে গিট ব্যবহার করে কিছু ভুল করে মুছে ফেলতে চায়!

আপনি যদি আপনার কাজটি রাখতে চান এবং কমান্ডটি প্রেরণ করতে 'পূর্বাবস্থায় ফেরা' করেন (আপনি রেপোতে ধাক্কা দেওয়ার আগে ধরা পড়েছেন):

git reset --soft HEAD~1

আপনি যদি শেষ কাজ থেকে অগ্রগতিতে আপনার কাজটি ধ্বংস করতে না চান তবে - হার্ড পতাকা ব্যবহার করবেন না


একটি সম্পূর্ণ কমিটি অপসারণ

git rebase -p --onto SHA^ SHA

স্পষ্টভাবে আপনি পরিত্রাণ পেতে চান রেফারেন্স সঙ্গে "SHA" প্রতিস্থাপন। যে কমান্ড "^" আক্ষরিক হয়।

http://sethrobertson.github.io/GitFixUm/fixup.html


সাবধান: git reset --hard আপনার কাজ পরিচালক পরিবর্তনগুলি মুছে ফেলবে । এই কমান্ডটি চালানোর আগে আপনি যে স্থানীয় পরিবর্তনগুলি রাখতে চান তা টানতে ভুলবেন না।

আপনি যে কমিট উপর বসা হয় অনুমান, তারপর এই কমান্ড এটি পচা হবে ...

git reset --hard HEAD~1

HEAD~1 মাথা আগে কমিট মানে।

অথবা, আপনি git log আউটপুটটি দেখতে পারেন, আপনি যেটি git log ব্যাক আপ করতে চান git log আইডিটি সন্ধান করুন এবং তারপরে এটি করুন:

git reset --hard <sha1-commit-id>

যদি আপনি এটি ইতিমধ্যে push করা, আপনি এটি পরিত্রাণ পেতে একটি বল ধাক্কা করতে হবে ...

git push origin HEAD --force

তবে , অন্যদের এটি টানা হতে পারে, তাহলে আপনি একটি নতুন শাখা শুরু বন্ধ ভাল হবে। কারণ তারা যখন টানবে, তখন এটি কেবল তাদের কাজের মধ্যে এটি একত্রিত করবে এবং আপনি আবার এটি পুনরুদ্ধার করতে সক্ষম হবেন।

যদি আপনি ইতিমধ্যে ধাক্কা দেন, তবে git revert ব্যবহার করা আরও ভাল হতে পারে, একটি "মিরর চিত্র" কমিট তৈরি করতে যা পরিবর্তনগুলিকে পূর্বাবস্থায় ফিরিয়ে আনবে। যাইহোক, উভয় লগ লগ করা হবে।

FYI - git reset --hard HEAD - git reset --hard HEAD আপনি PROGRESS কাজ পরিত্রাণ পেতে চান মহান। এটি আপনাকে সাম্প্রতিকতম কমিটিতে ফিরিয়ে দেবে এবং আপনার কাজের গাছ এবং সূচকের সমস্ত পরিবর্তন মুছে ফেলবে।

অবশেষে, যদি আপনি "মুছে ফেলা" git reflog তবে এটি সাধারণত git reflog উপস্থিত থাকে git reflog না আপনার সংগ্রহস্থান আপনার সংগ্রহস্থল সংগ্রহ করে।


git rebase -i HEAD~2

এখানে '2' হল আপনি যে পরিমাণ বিনিময় করতে চান তা সংখ্যা।

'git rebase -i HEAD`

যদি আপনি সব commits রিবাজ করতে চান।

তারপর আপনি এই বিকল্পগুলির একটি চয়ন করতে পারবেন।

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

এই লাইন পুনরায় আদেশ করা যেতে পারে; তারা উপরে থেকে নীচে মৃত্যুদন্ড কার্যকর করা হয়। আপনি এখানে একটি লাইন মুছে ফেলেন যে কমিটি হারিয়ে যাবে। যাইহোক, যদি আপনি সবকিছু মুছে ফেলেন, রিবেস বাতিল করা হবে। খালি কমিট মন্তব্য করা হয় যে নোট করুন

আপনি কেবল "d" বিকল্পটি ব্যবহার করে যে কমিটিটি সরাতে পারেন অথবা আপনার লিখিত কোনও লাইন মুছে ফেলতে পারেন।








git-reset