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


1466

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

স্পষ্টতই, আমার কার্যকারী ডিরেক্টরি মুছে ফেলা এবং পুনরায় ক্লোনিং করা এটি করবে তবে গিটহাব থেকে আবার সবকিছু ডাউনলোড করা ওভারকিলের মতো বলে মনে হচ্ছে, এবং আমার সময়ের সদ্ব্যবহার নয়।

সম্ভবত git revertআমার যা প্রয়োজন তা হতে পারে তবে আমি কোডটি সঠিক অবস্থায় ফিরে না পেয়েও, উত্সের (বা ছয়টি) আগে 10 টি প্রতিশ্রুতি শেষ করতে চাই না । আমি কেবল শেষ অর্ধঘণ্টা কখনও ঘটেনি ভান করতে চাই।

একটি সহজ আদেশ আছে যে এটি করবে? এটি একটি সুস্পষ্ট ব্যবহারের ক্ষেত্রে বলে মনে হচ্ছে তবে এর কোনও উদাহরণ আমি খুঁজে পাচ্ছি না।


মনে রাখবেন যে এই প্রশ্নটি বিশেষভাবে কমিট সম্পর্কে , এর সম্পর্কে নয় :

  • আনক্র্যাকড ফাইল
  • আনস্টেজড পরিবর্তনসমূহ
  • মঞ্চস্থ, তবে বিনা অনুমতিতে পরিবর্তন

উত্তর:


2467

যদি আপনার অতিরিক্ত কমিটগুলি কেবল আপনার কাছে দৃশ্যমান হয় তবে আপনি git reset --hard origin/<branch_name> যেখানে আসল সেখানে ফিরে যেতে কেবল তা করতে পারেন । এটি পূর্বের প্রতিশ্রুতিতে সংগ্রহস্থলের স্থিতি পুনরায় সেট করবে এবং এটি সমস্ত স্থানীয় পরিবর্তন বাতিল করে দেবে।

একটি করে করা পুরানো কমিটগুলি এমনভাবে মুছে ফেলার জন্য নতুন প্রতিশ্রুতি দেয় যা প্রত্যেকের ইতিহাসকে বুদ্ধিমান করে git revertতোলে ।


90
git reset --hard <commit hash, branch, or tag>যদি আপনি কোনও দূরবর্তী শাখা ব্যতীত নির্দিষ্ট রেফারেন্সে যেতে চান।
স্যাম সোফেস

55
কেবল স্পষ্ট করে বলতে গেলে, আপনি যদি masterঅন্য কোনও শাখায় কাজ করছেন না তবে আপনার চালানো উচিতgit reset --hard origin/<your-branch-name>
জোল্টন

33
এটি কেবল স্থানীয় কমিটগুলি ফেলে দেবে না, তবে আপনার কার্য গাছের সমস্ত কিছুই ফেলে দেবে (যেমন আপনি স্থানীয় ফাইলগুলি)। যদি সব আপনি কি করতে চান uncommit, কিন্তু আপনার কাজ অক্ষত ত্যাগ করেন, তখন আপনি "Git রিসেট মস্তক ^" ... প্রতি কি করা উচিত stackoverflow.com/questions/2845731/...
aaronbauman

3
এর পরে আপনি আনতে পারেন do এটি সোর্সট্রি-তে-প্রত্যাশার-প্রত্যাশাকে ধাক্কা দেওয়া কাউন্টারকে স্থির করেছে।
স্টান

2
git reset --hard origin/<branch_name>এটি প্রকল্পের কনফিগারেশনটিকেও পুনরায় সেট করবে, তাই এটির যত্ন নিন। আমার একটি বড় .cfgফাইল রয়েছে যা ডিফল্টে পুনরায় সেট করা হয়েছিল। আমাকে আবার ঘন্টা কাটাতে হয়েছিল।
ম্যাক

271

কেবল আপনার স্থানীয় মাস্টার শাখাটি মুছুন এবং এটিকে আবার পুনরায় তৈরি করুন:

git branch -D master
git checkout origin/master -b master

2
আপনার পরিবর্তনগুলি ব্যাকট্র্যাক করার ক্ষেত্রে খুব বেশি সময় লাগতে পারে যখন এটি বেশ ভালভাবে কাজ করে যা বেশ কয়েকটা ছাড়ের পরে আমার সাথে ঘটেছিল।

1
দলের সদস্যদের মধ্যে সাবট্রি টান / ধাক্কা সমস্যার জন্য দরকারী!
হোর্হে অর্পিনেল

আপনি নিখুঁত মাস্টার পরিবর্তে কোনও শাখা পুনরুদ্ধার করতে চাইলে এটি উপযুক্ত।
ভ্লাদিমির রালেভ

1
একক স্থানীয় প্রতিশ্রুতি মুছে ফেলার এটি কোনও ভাল উপায় নয়। ব্যবহার করা ভালgit reset --hard origin/<branch_name>
কিরীট ওয়াঘেলা

1
হতে পারে যে সমাধানটি কাজ করবে, তবে এর অর্থ এটি যথাযথ নয়।
এডলি

201

চেষ্টা করুন:

git reset --hard <the sha1 hash>

আপনি যেখানেই যেতে চান সেখানে আপনার মাথাটি পুনরায় সেট করতে। আপনি কোন প্রতিশ্রুতিবদ্ধ থাকতে চান তা দেখতে গিটক ব্যবহার করুন। আপনি গিটকের মধ্যেও পুনরায় সেট করতে পারেন।


5
এই বি / সিটিকে দরকারী তথ্য হিসাবে চিহ্নিত করা হয়েছে, তবে বেন জ্যাকসনের জবাবটি আমি যা চেয়েছিলাম ঠিক তা সমাধান করার জন্য চেকমার্কটি পেয়েছে - এমনভাবে যাতে আমার কাছে কমিট হ্যাশগুলি সন্ধান করার প্রয়োজন হয় না। :)
ডেভিড মোল

2
এটিই হ'ল যখন আপনার নতুন শাখাটি এখনও কখনও
জানুয়ারী

126

সাম্প্রতিক প্রতিশ্রুতি মুছুন:

git reset --hard HEAD~1

আপনি যে কাজটি করেছেন তা বিনষ্ট না করে সাম্প্রতিক প্রতিশ্রুতি মুছুন:

git reset --soft HEAD~1


5
দরকারী উত্তর। ধন্যবাদ! আমি গিট রিসেট ব্যবহার করেছি
তরুণ কুমার

2
@ তরুনকুমার আপনাকে ধন্যবাদ! আমি ভিএস ইন্টিগ্রেশন ব্যবহার করছি, এবং আপনার সমাধানের একমাত্র উপায় ছিল আমি একগুচ্ছ মার্জ
কমেটগুলি

ধন্যবাদ, আমি যা খুঁজছিলাম, "গিট রিসেট --সোফট হেড ~ 1" কাজটি আমি অনিচ্ছাকৃতভাবে প্রতিশ্রুতিবদ্ধ করে দিয়েছিলাম এবং প্রত্যাবর্তন করতে চেয়েছিলাম তবে অন্য ফাইলগুলি ছিল যা আমি প্রত্যাবর্তনের পরে নষ্ট করতে চাইনি।
এডওয়ার্ড_মুনচ

47

আপনি যদি আটলশিয়ান সোর্স ট্রি অ্যাপ ব্যবহার করেন তবে আপনি প্রসঙ্গ মেনুতে রিসেট বিকল্পটি ব্যবহার করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন


42

আপনার শাখার প্রয়াসে:

git reset --hard origin/<branch_name>

" git log" বা " git status" ব্যবহার করে বিপরীতমুখীকরণ (কোনও স্থানীয় প্রতিশ্রুতি না দিয়ে রাজ্যে) বৈধ করুন ।


1
@ ট্রয়সেফ: উপরে উল্লিখিত সমস্ত উত্তর, আমি এটির মতো চেষ্টা করেছি, এবং দৃশ্যের সংশোধন হয়নি। জেনেরিক দৃষ্টিভঙ্গি, যা উপরের উত্তরগুলির মধ্যে কোনওটির মধ্যে চিত্রিত হয়নি, এখানেই উত্তর দেওয়ার চেষ্টা করা হয়েছে।
পরশ্রিশ

3
গৃহীত উত্তরটি আপনার মত, জেনেরিক শাখার নামটি বিয়োগের মত, এবং মন্তব্যে @ জোলটান স্পষ্টভাবে বলেছেJust to be clear, if you're not working on master but on another branch, you should run git reset --hard origin/<your-branch-name>
ট্রয়সেফ

1
এটি আমার মতে সেরা উত্তর।
দ্বিজোহনস্টন

21

git reset --hard @{u}* কমিট সহ বর্তমান শাখায় আপনার সমস্ত স্থানীয় পরিবর্তন মুছে দেয়। আমি অবাক হয়েছি এখনও কেউ এটি পোস্ট করেননি বিবেচনা করে আপনাকে শাখাগুলিতে ফিরে যাওয়ার বা খেলতে কী প্রতিশ্রুতিবদ্ধ তা সন্ধান করতে হবে না।

* অর্থাৎ বর্তমান শাখা রিসেট @{upstream}-commonly origin/<branchname>, তবে সব সময় নয়


1
মাছের মতো কিছু শাঁস "@" কে ব্যাখ্যা করবে যাতে আপনাকে '@ {u}' উদ্ধৃতিতে রাখতে হবে, যেমন it গিট রিসেট --হার্ড '@ {u}'। যাইহোক, ভাল সন্ধান!
ট্রিপসিস

দুর্দান্ত উত্তর দুর্দান্ত
মারকো

1
আপনি কীভাবে @ {u} এর মান মুদ্রণ করবেন?
ফিলিপ রেগো

12

আপনিও ফিরে আসতে চান এমন প্রতিশ্রুতিটির SHA-1 আইডি দেখতে / পেতে

gitk --all

যে প্রতিশ্রুতি ফিরে রোল

git reset --hard sha1_id

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


এটি এমন পরিস্থিতির জন্য দুর্দান্ত যেখানে রিমোটটি আর উপলভ্য নয় এবং এটিকে কেবল কিছু স্থানীয় প্রতিশ্রুতিতে পুনরায় সেট করা দরকার। গিটক দুর্দান্ত - এটি আগে জানা ছিল না।
দ্য রাইলে

আপনি যদি ইতিমধ্যে গিটকে থাকেন তবে আপনি কেবল কমিটের উপর ডান ক্লিক করতে পারেন এবং "এখানে ব্রাঞ্চ এক্সওয়াই রিসেট করুন" নির্বাচন করুন।
mkrieger1

এবং নতুন কমিটগুলি অবিলম্বে মোছা হবে না। তাদের দিকে ইশারা করার মতো কোনও শাখা নেই (মনে রাখবেন, একটি শাখা নির্দিষ্ট প্রতিশ্রুতিবদ্ধতার জন্য "বুকমার্ক" ছাড়া কিছুই নয়)।
mkrieger1

9

আমার এমন পরিস্থিতি হয়েছিল যেখানে আমি এমন প্রতিশ্রুতি অপসারণ করতে চেয়েছিলাম যা ঠেকানো হয়নি, তবে প্রতিশ্রুতি ছিল অন্যটির আগে। এটি করার জন্য, আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি

git rebase -i HEAD~2 -> এটি শেষ দুটি কমিটি পুনঃনির্মাণ করবে

এবং আমি যে চুক্তিটি সরাতে চাইছিলাম তার জন্য 'ড্রপ' ব্যবহার করেছি to


9

অচিহ্নযুক্ত ফাইলগুলি সরান (স্থানীয় পরিবেশ ছাড়াই)

git clean -df

স্থায়ীভাবে সমস্ত স্থানীয় কমিট মোছা এবং সর্বশেষতম দূরবর্তী প্রতিশ্রুতি পান

git reset --hard origin/<branch_name>

8

স্থানীয় কমিটগুলির জন্য যা ধাক্কা দেওয়া হচ্ছে না, আপনি git rebase -iকোনও কমিট মুছতে বা স্কোয়াশ করতেও ব্যবহার করতে পারেন ।


1
আমি জানি এটি সবচেয়ে সংক্ষিপ্ত সমাধান নাও হতে পারে, তবে আমি আপনাকে উত্সাহিত করেছি যেহেতু আইএমএইচও git rebase -iএকই ধরণের অনেক সমস্যা সমাধানের আরও সাধারণ উপায় এবং বিভিন্ন পরিস্থিতিতে সহায়ক হতে পারে।
স্টিফান মেরিনভ 31'17

1
dropরিবেস বাতিল হওয়া এড়াতে সমস্ত কমিট অপসারণ করার সময় কীওয়ার্ডটি (একটি লাইন মুছে ফেলার পরিবর্তে) ব্যবহার করুন ।
মিশাল ইজমাজিয়া

6

সরল সলিউশনটি স্থানীয় মাস্টার শাখা হেডের সাথে মূল / মাস্টার শাখা হেডের সাথে মিলবে match

git reset --hard origin/master

পিএস: উত্স / মাস্টার - মাস্টার শাখার দূরবর্তী পয়েন্টার। আপনি যে কোনও শাখার নাম দিয়ে মাস্টার প্রতিস্থাপন করতে পারেন


4

উত্তর দেওয়ার আগে আসুন কিছু ব্যাকগ্রাউন্ড যুক্ত করুন, এটি কী তা ব্যাখ্যা করে HEAD। যেহেতু নীচের কয়েকটি বিকল্পের ফলে মাথা বিচ্ছিন্ন হয়ে যাবে

First of all what is HEAD?

HEADকেবলমাত্র বর্তমান শাখায় বর্তমান প্রতিশ্রুতি (সর্বশেষ) এর একটি উল্লেখ। যে কোনও সময়
কেবলমাত্র একা HEADথাকতে পারে । (ব্যতীতgit worktree )

এর সামগ্রীটি HEADভিতরে সঞ্চিত .git/HEADরয়েছে এবং এতে বর্তমান প্রতিশ্রুতিতে 40 বাইট এসএইএ -1 রয়েছে।


detached HEAD

অর্থ যে - আপনি সর্বশেষ কমিট উপর না হন, তাহলে HEADতার নামে একটি পূর্বে নির্দেশ করা হয় ইতিহাসে কমিট detached HEAD

এখানে চিত্র বর্ণনা লিখুন

কমান্ড লাইনে এটি দেখতে শাখা -1 এর পরিবর্তে SHA-1 দেখতে পাবেন যেহেতু HEADবর্তমান শাখার অগ্রভাগের দিকে ইশারা করছে না

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

বিচ্ছিন্ন হেড থেকে কীভাবে পুনরুদ্ধার করবেন সে সম্পর্কে কয়েকটি বিকল্প:


git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

এটি পছন্দসই প্রতিশ্রুতি নির্দেশ করে নতুন শাখাটি চেকআউট করবে।
এই আদেশটি প্রদত্ত প্রতিশ্রুতিতে চেকআউট করবে।
এই মুহুর্তে, আপনি একটি শাখা তৈরি করতে পারেন এবং এই বিন্দু থেকে কাজ শুরু করতে পারেন।

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

git reflog

আপনি সর্বদা reflogপাশাপাশি ব্যবহার করতে পারেন ।
git reflogআপডেট হওয়া যে কোনও পরিবর্তন প্রদর্শন করবে HEADএবং কাঙ্ক্ষিত রিফ্লগ এন্ট্রি চেক HEADকরা এই প্রতিশ্রুতিতে ফিরে আসবে।

যতবারই হেডের সংশোধন করা হয় সেখানে একটি নতুন প্রবেশ থাকবে reflog

git reflog
git checkout HEAD@{...}

এটি আপনাকে আপনার কাঙ্ক্ষিত প্রতিশ্রুতিতে ফিরিয়ে আনবে

এখানে চিত্র বর্ণনা লিখুন


git reset --hard <commit_id>

আপনার হেডকে পছন্দসই প্রতিশ্রুতিতে "সরান"।

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
  • দ্রষ্টব্য: ( গিট ২.7 থেকে )
    আপনি এটিও ব্যবহার করতে পারেন git rebase --no-autostash

git revert <sha-1>

প্রদত্ত প্রতিশ্রুতি বা প্রতিশ্রুতি ব্যাপ্তি "পূর্বাবস্থায় ফিরিয়ে দিন"।
রিসেট কমান্ড প্রদত্ত প্রতিশ্রুতিতে যে কোনও পরিবর্তন "পূর্বাবস্থায়" ফেলবে।
পূর্বাবস্থার প্যাচ নিয়ে একটি নতুন প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ হবে যখন মূল প্রতিশ্রুতি ইতিহাসেও থাকবে।

# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>

এই স্কিমাটি বোঝায় যে কোন আদেশটি কী করে।
আপনি দেখতে পারেন সেখানে reset && checkoutপরিবর্তন HEAD

এখানে চিত্র বর্ণনা লিখুন


3

ভিজ্যুয়াল স্টুডিও সমাধানটিতে আগ্রহীদের জন্য, এখানে ড্রিলটি দেওয়া হয়েছে:

  1. ইন Team Explorerউইন্ডো লক্ষ্য রেপো সাথে সংযোগ করুন।
  2. তারপরে Branches, আগ্রহের শাখায় ডান ক্লিক করুন এবং নির্বাচন করুনView history
  3. Historyউইন্ডোতে একটি প্রতিশ্রুতি রাইট ক্লিক করুন এবং চয়ন করুন Reset -> Delete changes (--hard)

এটি আপনার স্থানীয় কমিটগুলি দূরে সরিয়ে দেবে এবং নির্বাচিত প্রতিশ্রুতিতে আপনার রেপির স্থিতি পুনরায় সেট করবে। অর্থাৎ রেপো টানার পরে আপনার পরিবর্তনগুলি নষ্ট হয়ে যাবে।


2

যদি তোমার শাখা এগিয়ে থাকে 'origin/XXX 'কমিট' দ্বারা ' এর ।

আপনি ইস্যু করতে পারেন:

git reset --hard HEAD~5

এবং এটি সর্বশেষ 5 টি কমিটগুলি সরিয়ে ফেলতে হবে।


0
git reset --hard <SHA-Code>

এটি যদি আপনার স্থানীয় অনুলিপিতে কিছু ভুল করে থাকে যে আপনি ভুল করে আপনার দূরবর্তী শাখায় ঠেলাঠেলি না করে তা নিশ্চিত করতে চান তবে এটি কার্যকর হবে।

শাখাটিতে শেষ প্রতিশ্রুতি দেওয়ার জন্য আপনার গিট ড্যাশবোর্ডের ওয়েব সংস্করণ দেখে SHA- কোড পাওয়া যাবে।

এইভাবে আপনি শাখায় সর্বশেষ কমিটের সাথে সিঙ্ক্রোনাইজ করতে পারেন।

আপনি করতে পারেন git pull আপনি সফলভাবে নিশ্চিত SYN অর্থাত আপনি বার্তা দেখতে পান মতো নতুন কিছু কঠিন রিসেট সম্পন্ন হওয়ার পরে।

আপনার শাখাটি আপ টু ডেট Origin/<Branch Name>


0

যদি আপনি আপনার স্থানীয় রেপোকে একটি সম্পূর্ণ গণ্ডগোলের মধ্যে পেয়ে থাকেন তবে গিটের স্থানীয় কমিটগুলি ফেলে দেওয়ার একটি নির্ভরযোগ্য উপায় হ'ল ...

  1. দূরবর্তী উত্সের ইউআরএল পেতে "গিট কনফিগারেশন --ेट রিমোট.রিগিন.আরল" ব্যবহার করুন
  2. স্থানীয় গিট ফোল্ডারটির নাম "আমার_ব্রোকেন_লোকাল_রেপো" করুন
  3. দূরবর্তী গিট সংগ্রহস্থলের নতুন স্থানীয় অনুলিপি পেতে "গিট ক্লোন <url_from_1>" ব্যবহার করুন

আমার অভিজ্ঞতায় Eclipse বিশ্বের প্রায় পুরোপুরি পরিবর্তিত পরিচালনা করে। যাইহোক, আপনাকে Eclipse এ প্রভাবিত প্রকল্পগুলি নির্বাচন করতে হবে এবং তাদের পুনর্নির্মাণের জন্য Eclipse কে জোর করার জন্য এগুলি পরিষ্কার করতে হবে। আমার ধারণা অন্যান্য আইডিইগুলির জন্যও জোর করে পুনর্নির্মাণের প্রয়োজন হতে পারে।

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


0

আপনি যদি কেবল স্থানীয় কমিটগুলি ফেলে দিতে চান এবং ফাইলগুলিতে সম্পাদনাগুলি চালিয়ে যেতে চান তবে
গিট রিসেট করুন @ ~
অন্যান্য পুনরুদ্ধারগুলি হার্ড রিসেটকে সম্বোধন করেছে

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