পরিবর্তনগুলি হারা না করে কীভাবে সর্বশেষ আন-পশিত গিট কমিট আন-কমিট করবেন


539

কোনও প্রতিশ্রুতি ফিরিয়ে দেওয়ার কোনও উপায় কী যাতে আমার স্থানীয় অনুলিপি সেই প্রতিশ্রুতিতে পরিবর্তনগুলি রক্ষা করে তবে তারা আমার কার্যকরী অনুলিপিগুলিতে অ-প্রতিশ্রুতিবদ্ধ পরিবর্তন হয়ে যায়? কোনও প্রতিশ্রুতি ফিরিয়ে দেওয়া আপনাকে পূর্বের প্রতিশ্রুতিতে নিয়ে যায় - আমি পরিবর্তনগুলি রাখতে চাই তবে আমি সেগুলি ভুল শাখায় প্রতিশ্রুতিবদ্ধ।

এটিকে ধাক্কা দেওয়া হয়নি, কেবল প্রতিশ্রুতিবদ্ধ।



6
git reset --softএবং git reset --mixedদুজনেই এটি করেন (কিছুটা আলাদাভাবে), গিট-রিসেট দেখুন
টোরিক

উত্তর:


930

এটি করার অনেকগুলি উপায় রয়েছে, উদাহরণস্বরূপ:

যদি আপনি আছে না ধাক্কা প্রকাশ্যে এখনো সমর্পণ

git reset HEAD~1 --soft   

এটি হ'ল, আপনার প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি আপনার কার্যনির্বাহী ডিরেক্টরিতে থাকবে, যেখানে সর্বশেষ কমিটগুলি আপনার বর্তমান শাখা থেকে সরানো হবে। দেখুন Git রিসেট মানুষ


যদি আপনি করেনি ধাক্কা প্রকাশ্যে (ক শাখা 'মাস্টার' নামক দিকে):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

প্রত্যাবর্তন স্বাভাবিকভাবে প্রতিশ্রুতিবদ্ধ এবং ধাক্কা

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

এখন আপনি যদি আপনার ওয়ার্কিং কপির স্থানীয় পরিবর্তন হিসাবে এই পরিবর্তনগুলি দেখতে চান ("যাতে আপনার স্থানীয় অনুলিপি সেই প্রতিশ্রুতিতে পরিবর্তনগুলি বজায় রাখে") - কেবল --no-commitবিকল্পটি দিয়ে রিভার্ট কমিটকে ফিরিয়ে দিন :

git revert --no-commit 86b48ba (hash of the revert commit).

আমি একটি ছোট উদাহরণ তৈরি করেছি: https://github.com/Isantipov/git-revert/commits/master


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

2
আপনি যদি সিএলআই ব্যবহার না করে থাকেন তবে তার জন্য কিছুটা স্পষ্টতা যুক্ত করতে প্রথমে resetউল্লিখিত কমান্ডটি মাথার আগে 1 টি রেভকে "মৃদুভাবে" পুনরায় সেট করতে বলছে, যা সমস্ত স্থানীয় পরিবর্তন সংরক্ষণ করে। সোর্স ট্রি এ ব্যবহারের জন্য এটি আমার কাছে তাত্ক্ষণিকভাবে স্পষ্ট হয় নি। কেবল নিশ্চিত হয়ে নিন যে আপনি আগের রেভটিতে নরম রিসেট করছেন, আপনি যে রিভটি পুনরায় সেট করার চেষ্টা করছেন তা নয়
জন বি

1
আমি "ইতিমধ্যে ধাক্কা" থাকা পদ্ধতির চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করে না, গিট 2.14.1 সহ: এটি "Already up to date"মার্জ করার সময় বলে ।
ফ্যাবিও এ।

1
@FabioA। , আমি একটি উত্তর সংস্করণ দিয়ে উত্তর আপডেট করেছি। এটি লক্ষ্য করার জন্য ধন্যবাদ!
ইসানটিপভ

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

13

আপনি যদি পরিবর্তনগুলি ঠেলে দেন তবে আপনি undoএটি করতে পারেন এবং অন্য কোনও শাখা ব্যবহার না করেই ফাইলগুলিকে মঞ্চে ফিরিয়ে আনতে পারেন।

git show HEAD > patch
git revert HEAD
git apply patch

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


আপনি চাও পারে rm patchখুব
ম্যাক্স Coplan

6

মামলার জন্য: "এটিকে ধাক্কা দেওয়া হয়নি, কেবল প্রতিশ্রুতিবদ্ধ ।" - আপনি ব্যবহার IntelliJ (অথবা অন্য JetBrains আইডিই) এবং আপনি এখনও পরিবর্তন ধাক্কা নি আপনি পরবর্তী এটা করতে পারেন।

  1. সংস্করণ নিয়ন্ত্রণ উইন্ডোতে যান ( Alt + 9 / আদেশ + 9 ) - "লগ" ট্যাব।
  2. আপনার শেষটির আগে একটি প্রতিশ্রুতিতে ডান ক্লিক করুন।
  3. এখানে বর্তমান শাখাটি পুনরায় সেট করুন
  4. নরম বাছুন (!!!)
  5. কথোপকথনের উইন্ডোর নীচে রিসেট বোতামটি টিপুন।

সম্পন্ন.

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


2
আমি জেটব্রেইনস পদ্ধতি শিখতে পছন্দ করি, ধন্যবাদ! git reset --soft "HEAD^"এটি উইন্ডোজের সমতুল্য , বিটিডব্লিউ। :)
পেইন

3

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

git revert commit-hash
git push

git checkout my-other-branch
git revert revert-commit-hash
git push
  1. প্রতিশ্রুতি ফিরিয়ে দিন
  2. (তৈরি এবং) অন্যান্য শাখা চেকআউট করুন
  3. রিভার্ট ফিরিয়ে দিন

1
আমি এটি পরীক্ষা করেছি। আপনি যদি রিমোটে চাপ না দিয়ে থাকেন তবে আপনার পদ্ধতির কাজও করে। it গিট রিভার্ট <কমিট-হ্যাশ> ... তারপরে অন্য কোনও শাখায় চেকআউট করুন, তারপরে it গিট রিভার্ট <রিভার্ট- কমিট- হ্যাশ> (ধাক্কা ছাড়াই) টাইপ করুন। এই সহজ পদ্ধতির ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ !!
নাটালি কোট্রিল

1

পৃথক ফোল্ডারে এই কমন্ড চালানোর আগে আপনার পরিবর্তনগুলি ব্যাকআপ করার বিষয়টি নিশ্চিত করুন ease

গিট চেকআউট শাখা_নাম

আপনার শাখায় চেকআউট

গিট মার্জ --abort

মার্জটি বাতিল করুন

গিট স্ট্যাটাস

মার্জটি বাতিল করার পরে কোডের স্থিতি পরীক্ষা করুন

গিট রিসেট --হোল্ড উত্স / শাখা_নাম

এই কমান্ডটি আপনার পরিবর্তনগুলি পুনরায় সেট করবে এবং আপনার কোডটি ব্রাঞ্চ_নাম (শাখা) কোডের সাথে একত্রিত করবে।


0

2020 সহজ উপায়:

git reset <commit_hash>

আপনি রাখতে চান সর্বশেষ কমিটের হ্যাশ কমিট করুন।

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