গিট কমিট সরিয়ে ফেলুন যা ধাক্কা দেয়নি


721

আমি একটি করেছি git commitকিন্তু আমি এখনও এটি সংগ্রহস্থলটিতে ঠেলাতে পারি নি। সুতরাং আমি যখন করি তখন আমি git statusপেয়ে যাব '# আপনার শাখা 1 টি কমিটের মাধ্যমে' মাস্টার 'এর চেয়ে এগিয়ে।

সুতরাং আমি যদি আমার শীর্ষ প্রতিশ্রুতি ফিরে পেতে চাই তবে আমি কি কেবল এটি করতে পারি:

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316

আমি যখন পাই তখন তা git logপেয়েছি:

কমিট eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
তারিখ: মঙ্গল 29 সেপ্টেম্বর 11:21:41 2009 -0700


কমিট করুন db0c078d5286b837532ff5e276dcf91885df2296
তারিখ: মঙ্গল 22 সেপ্টেম্বর 10:31:37 2009 -0700

9
এই প্রশ্নটি আপনার নিজের অন্য একটি প্রশ্নের সদৃশ বলে মনে হচ্ছে: স্ট্যাকওভারফ্লো
ব্রায়ান ক্যাম্পবেল



3
বিপদজনক: reset --hardকাজের ক্ষতি হতে পারে, কারণ এটি করার ফলে গিট আপনার ওয়েব ফাইলগুলি (আপনার নতুন কাজ) ওয়েব থেকে প্রাপ্ত ফাইলগুলির সাথে ওভাররাইট করে (আমার ক্ষেত্রে ঘটেছিল)। গিট সম্পর্কিত প্রশ্নোত্তরগুলিতে তাদের কমান্ডগুলি কী করছে এবং নিম্নলিখিত পাঠকদের জন্য ঝুঁকিগুলি কী তা স্পষ্টভাবে জানিয়ে দেওয়া উচিত।
অরেঞ্জশার্বেট

উত্তর:


673

প্রকৃতপক্ষে, আপনি যখন ব্যবহার করবেন তখন আপনার git resetসেই প্রতিশ্রুতিটি উল্লেখ করা উচিত যা আপনি পুনরায় সেট করছেন ; সুতরাং আপনি db0c078সম্ভবত প্রতিশ্রুতি চাইবেন ।

একটি সহজ সংস্করণ হবে git reset --hard HEAD^, বর্তমান মাথা আগে আগের প্রতিশ্রুতি পুনরায় সেট করা; এইভাবে আপনাকে কমিট আইডির চারপাশে অনুলিপি করতে হবে না।

আপনি যখনই কিছু করেন তখন সাবধান git reset --hardহন, যেহেতু আপনি আপনার যে কোনও অনির্দিষ্ট পরিবর্তন হারাতে পারেন। git statusআপনার কার্যকরী অনুলিপিটি পরিষ্কার কিনা তা আপনি যাচাই করতে চাইতে পারেন বা আপনি যে কোনও পরিবর্তন আছে তা দূরে সরিয়ে দিতে চান।

এছাড়াও, origin/masterহেডের পরিবর্তে আপনি রেফারেন্স হিসাবে ব্যবহার করতে পারেন , যেমন মন্তব্যগুলিতে @ বিডনলান দ্বারা প্রস্তাবিত:git reset --hard origin/master


374
বা git reset --hard origin/master, এটিকে যেদিকে উত্স ছিল তা পুনরায় সেট করতে।
বিডনলান

1
আর একটি দরকারী পয়েন্টার যা আপনি পুনরায় সেট করতে পারেন তা হ'ল ORIG_HEAD বা এর সাধারণীকরণ রিফ্লগ হেড @ {1} (হেডের শেষ অবস্থান) ব্যবহার করে।
জাকুব নারেবস্কি

12
পাঠক, git resetআপনার কোডের আগে । আপনার ভবিষ্যত স্ব একটা উপকার করবেন: মধ্যে পার্থক্য reset, reset --softএবং reset --hard(আপনার তার আগে কি হবে git add: চিত্র ওরফে "আপনার কাজ" :) লিংক
user18099

3
দ্রষ্টব্য যে এটি আপনি যে প্রতিশ্রুতিটি সরিয়ে ফেলতে চেয়েছিলেন তা মুছে git statusফেলবে (সুতরাং কোনও পরিবর্তন প্রদর্শিত হবে না এবং প্রতিশ্রুতি মুছে ফেলা হবে / পরিবর্তনগুলি হারিয়ে যাবে)।
বুর্জন ​​বারেনসেন

12
দ্রষ্টব্য: ব্যবহারের সময় সতর্কতা অবলম্বন করুন git reset --hard HEAD^আপনি কমিট করা ফাইলগুলিতে পরিবর্তনগুলি হারাবেন (আপনার পরিবর্তনগুলি মুছে ফেলা হবে)। এই প্রশ্নের দুটি শাখা রয়েছে: একটি প্রতিশ্রুতি ফিরিয়ে আনতে তবে এখনও ডিস্কে পরিবর্তন রয়েছেgit reset --soft HEAD~1
পপিজি

625

যদি আপনি আপনার পরিবর্তনগুলি দূরবর্তী দিকে ঠেলে না থাকেন

git reset HEAD~1

ওয়ার্কিং কপিটি পরিষ্কার করে কিনা তা পরীক্ষা করে দেখুন git status

ELSE আপনি নিজের পরিবর্তনগুলিকে দূরবর্তী দিকে ঠেলে দিয়েছেন

git revert HEAD

এই কমান্ডটি সর্বশেষ এক প্রতিশ্রুতি / পরিবর্তনটি ফিরিয়ে আনবে / সরিয়ে দেবে এবং তারপরে আপনি চাপ দিতে পারেন


34
"সর্বশেষ গিট কমিট যা সরানো হয়নি" মুছে
ফেলার

25
এছাড়াও, এটি স্থানীয় প্রতিশ্রুতিগুলিতে স্থানীয় পরিবর্তনগুলি রাখে, যদিও গিট পুনরায় সেট করা হয়
হ্যার্ড

1
আমার জন্য, এটি সর্বশেষ চাপানো প্রতিশ্রুতি এবং অনিশ্চিত প্রতিশ্রুতি পূর্বাবস্থায় ফিরিয়ে দেবে
কোডিচান

আমার জন্য গিট রিভার্ট হেড সবেমাত্র সমস্ত ফাইল মুছে ফেলা হয়েছে যা আমি ধাক্কা দেওয়ার জন্য প্রস্তুত ছিলাম। সাবধান হও!
জেসন ব্রুস

158
git reset --hard origin/master

উত্সটি যা ছিল তাতে এটিকে পুনরায় সেট করতে।

এটি মন্তব্যগুলিতে @ বিডনলান পোস্ট করেছেন । আমি এই উত্তরটি এমন লোকদের জন্য যুক্ত করেছি যারা মন্তব্য পড়ে না।


4
এই প্রশ্নটি প্রায় 5 বছর আগে জিজ্ঞাসা করা হয়েছিল, এবং এটি ইতিমধ্যে একটি মন্তব্যে রয়েছে।
অনুবিয়ান নুব

1
যদি বর্তমান স্থানীয় শাখা পৃথক হয় master- তবে আমি কি এটি ব্যবহার করব origin/mybranch?
পাভেল ভ্লাসভ

9
আমি যখন জবাবের জন্য তাড়াহুড়ো করি তখন আমি সাধারণত মন্তব্যগুলি পড়ি না ... উত্তর হিসাবে ধন্যবাদ দেওয়ার জন্য ধন্যবাদ (একটি সাধারণ যা কাজ করে)
লিওনার্দো আলভেস মাচাডো

সতর্কতা: সাবধান থাকুন যে এটি আপনার বিদ্যমান কোড পরিবর্তনগুলি সরিয়ে ফেলবে, অন্যটি git reset HEAD~যা কেবল কোডে প্রতিশ্রুতি ফিরিয়ে দেয়
মায়ার

69

এই প্রশ্নের দুটি শাখা রয়েছে (প্রতিশ্রুতি রোল করার অর্থ এই নয় যে আমি আমার সমস্ত স্থানীয় পরিবর্তন হারাতে চাই):

1. প্রতিশ্রুতিবদ্ধ ফাইলের সর্বশেষ প্রতিশ্রুতি প্রত্যাহার করতে এবং পরিবর্তনগুলি বাতিল করতে:

git reset --hard HEAD~1

২. সর্বশেষতম প্রতিশ্রুতি ফিরিয়ে আনতে তবে স্থানীয় পরিবর্তনগুলি (ডিস্কে) ধরে রাখুন :

git reset --soft HEAD~1

এটি (পরবর্তী কমান্ড) আপনাকে সেই রাজ্যে নিয়ে যাবে যা আপনি যদি করতেন git add

এর পরে যদি আপনি ফাইলগুলি আনস্টেজ করতে চান তবে করুন

git reset

এখন আপনি যুক্ত করার পরে আবার প্রতিশ্রুতিবদ্ধ হওয়ার আগে আরও পরিবর্তন করতে পারেন।


47

কেবল কনসোলে টাইপ করুন:

$ git reset HEAD~

এই কমান্ডটি দূরবর্তী হেডের আগে সমস্ত স্থানীয় কমিটগুলি বাতিল করে দেয়


7
আপনার উত্তরটি বিদ্যমান উত্তরগুলির সাথে কী যুক্ত করে তা ব্যাখ্যা করতে পারেন?
নভে

এই মুছে ফেলা হবে বর্তমান ঠেলাঠেলি পূর্বে কমিট - অন্য উত্তর মত - - পরিবর্তনগুলি এটি প্রত্যাবর্তন স্থানীয়ভাবে ছাড়া যা তীব্র চুল বাহিনী ফিরিয়ে আনা মুহূর্ত হতে পারে
গ্রান্ট

41

আমি বিশ্বাস করি যে এর মধ্যে একটিও আপনার প্রয়োজনের সাথে খাপ খায়

1 - কমিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন এবং সমস্ত ফাইল মঞ্চস্থ রাখুন: git reset --soft HEAD~;

2 - কমিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন এবং সমস্ত ফাইল আনস্টেজ করুন: git reset HEAD~;

3 - প্রতিশ্রুতিটি পূর্বাবস্থায় ফেরান এবং সমস্ত পরিবর্তন সম্পূর্ণরূপে সরান: git reset --hard HEAD~;

আমি উত্তর পেয়েছিলাম এখানে


এই উত্তরটি গ্রহণ করতে হবে: ডি
হারুন জন সাবু

30

ধাক্কা দেওয়ার আগে শেষ প্রতিশ্রুতি সরান

git reset --soft HEAD~1

1মানে শেষ প্রতিশ্রুতি, আপনি যদি দুটি শেষ ব্যবহার মুছে ফেলতে চান 2, এবং আরও


3
হাই কারিনা, এর উল্লেখ --softসম্ভাব্য উত্তরের সাথে উল্লেখযোগ্য, তবে কেন আপনি উল্লেখ করতে পারেন? আপনার সমাধানটি ব্যাখ্যা করা সর্বদা সহায়ক। ইংরাজির সাথে লেগে থাকার চেষ্টা করুন। ধন্যবাদ
ভ্লাসটিমিল ওভেক

1
--soft- নিশ্চিত করে যে আপনি যে ফাইলটির প্রতিশ্রুতিটি পূর্বাবস্থায়
ফেলার

19

আমি নীচে এটি খুব সহজ হিসাবে একই পরিস্থিতি অভিজ্ঞ হয়েছে। পাস commit-Idকরার মাধ্যমে আপনি যে বিশেষ প্রতিশ্রুতিতে যেতে চান সেখানে পৌঁছে যেতে পারেন:

git reset --hard {commit-id}

আপনি যখন আপনার শেষ প্রতিশ্রুতিটি সরিয়ে ফেলতে চান তাই আপনাকে commit-Idযেখানে আপনার পয়েন্টারটি সরিয়ে নিতে হবে সেই স্থানটি পাস করতে হবে:

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296

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

10

এই আমি কি কি:

প্রথমে আপনার শাখাটি পরীক্ষা করুন (আমার কেস masterব্রাঞ্চের জন্য):

git checkout master

তারপরে রিমোট হেড to এ পুনরায় সেট করুন it ( এটি আপনার সমস্ত স্থানীয় পরিবর্তনগুলি সরিয়ে ফেলবে ), জোর করে পরিষ্কার করুন এবং টানুন:

git reset HEAD^ --hard && git clean -df && git pull

1
এটি খুব পারমাণবিক বিকল্প। আমি সীমাবদ্ধ প্রতিশ্রুতিতে নরম পুনরায় সেট করার পরামর্শ দেব।
c0der512

3

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


উজ্জ্বল উত্তর - এটি সোর্সট্রি এ এটি সহজেই ক্লিক করতে দেয় :)
কামিল কিয়েসজেউস্কি

1

আমার ঠিক একই সমস্যা ছিল এবং শেষ করে:

git rebase -i HEAD~N

(এন হ'ল কমিটের সংখ্যাটি আপনাকে দেখিয়ে দেবে)

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

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