গিট টানটি কীভাবে পূর্বাবস্থা করা যায়?


238

আমি রিমোট উত্স সম্পর্কে অযাচিত প্রতিশ্রুতিগুলির কারণে আমার গিট টানটি পূর্বাবস্থায় ফিরিয়ে আনতে চাই, তবে আমার কোন সংশোধনীতে পুনরায় সেট করতে হবে তা আমি জানি না।

দূরবর্তী উত্সটিতে গিটটি টান দেওয়ার আগে আমি কীভাবে কেবল রাজ্যে ফিরে যেতে পারি?


4
পার্শ্ব দ্রষ্টব্য: আপনি git fetch upstreamপ্রথমে এটি দরকারী হিসাবে git diff upstream/branchদেখতে পারেন, তারপরে আপনি কীভাবে মিশ্রিত হবেন তা একবার তাড়াতাড়ি দেখুন all সবকিছু ঠিকঠাক থাকলে এগিয়ে যানgit merge upstream/branch
শাহবাজ

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

উত্তর:


391

বা অন্যান্য উত্তরের চেয়ে এটি আরও স্পষ্ট করে তুলতে:

git pull 

উপস?

git reset --keep HEAD@{1}

1.7.1 এর চেয়ে পুরানো গিটের সংস্করণগুলি নেই --keep। আপনি যদি এই জাতীয় সংস্করণ ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন --hard- তবে এটি একটি বিপজ্জনক অপারেশন কারণ এটি কোনও স্থানীয় পরিবর্তন হারিয়ে ফেলে।


মন্তব্যকারীকে

ORIG_HEAD হ্যান্ডের পূর্বের অবস্থা, কমান্ডগুলি দ্বারা সেট করা হয়েছে যা সম্ভবত বিপজ্জনক আচরণ করে, এগুলি ফিরিয়ে আনা সহজ হতে পারে। গিটটির রিফলগ রয়েছে এমনটি এখন কম দরকারী: হেড @ {1} মোটামুটিভাবে ORIG_HEAD এর সমতুল্য (HEAD @ {1 always সর্বদা HEAD এর সর্বশেষ মান, ORIG_HEAD বিপজ্জনক অপারেশনের আগে হেডের সর্বশেষ মান হয়)


2
HEAD @ ^ 1} এবং HEAD between এর মধ্যে পার্থক্য কী?
বিশালমাও

7
@hugemeow এটি একটি সূক্ষ্ম তাই প্রশ্ন হবে। এদিকে এটি man git-rev-parseবর্ণনা করে। HEAD@{1}সিম্বলিক পূর্ববর্তী মান HEADমধ্যে reflogযেহেতু HEAD^(প্রথম) হয় পিতা বা মাতা সংস্করণ বর্তমান HEAD। এই দু'জনের সমান হতে হবে (যেমন একটি রিবেস পরে, একটি হার্ড রিসেট, একটি শাখা সুইচ এবং এই জাতীয় জিনিস)। রিফ্লগের জন্য লিঙ্কযুক্ত নিবন্ধটি পড়ুন। চিয়ার্স
sehe

10
পাওয়ারশেল ব্যবহারকারীরা, ব্যাকটিক দিয়ে বন্ধনীগুলি থেকে বেরিয়ে যান:git reset HEAD@`{1`}
রবার্ট ক্লেপুল

3
ss64.com/ps/syntax-esc.html আমি মনে করি আপনি টাইপ করতে চেয়েছিলেন HEAD@`{1`}, বা এই বিষয়ে 'HEAD@{1}'
পসিক্স

2
আমি মনে করি এটি কেবল
টানাটিকে

67

git reflog showআপনাকে হেডের ইতিহাসটি দেখাতে হবে। আপনি আগে কোথায় ছিলেন তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন pull। তারপর আপনি যা করতে পারেন resetআপনার HEADযে কমিট।


গিট রিফ্লগ শো এই আউটপুটটি দিয়েছে: c9e5e4d হেড @ {0}: টানুন: দ্রুত এগিয়ে 1c86a22 হেড @ {1}: উত্সাহী মাস্টার টানুন: দ্রুত এগিয়ে 05c141a হেড @ {2}: টানুন: দ্রুত এগিয়ে আমি কি নিরাপদে হেডকে হেডে পুনরায় সেট করতে পারি? @ {1}
Kartins

সেহের অন্য উত্তরে কীভাবে সেখানে যাবেন সে সম্পর্কে বিশদ রয়েছে।
নওফাল ইব্রাহিম

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

যদি pullপ্রথম পদক্ষেপ হয়? যদি pullথাকে HEAD@{1}এবং তার আগে অন্য কিছু না হয় , আপনি কীভাবে তার আগে কোনও অবস্থায় ফিরে যাবেন?
হেন্দ্র উজিয়া

সংগ্রহস্থল পুনরুদ্ধার করবেন?
নওফাল ইব্রাহিম

29

এটি আমার পক্ষে কাজ করেছে।

git reset --hard ORIG_HEAD 

মার্জ বা টান পূর্বাবস্থায়:

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

এটি চেকআউট করুন: আরও বেশিের জন্য গিটে হেড এবং ওআরআইজিএইইডি


17

<SHA#>আপনি যে প্রতিশ্রুতি রাখতে চান তার জন্য অনুসন্ধান করুন। আপনি এটি গিথুব বা টাইপ করে git logবা git reflog showকমান্ড লাইনে এবং এটি করতে পারেন git reset --hard <SHA#>


প্রতিশ্রুতি জন্য কি খুঁজে?
মার্টিন

দুঃখিত, আমি এটি স্থির করে রেখেছি<SHA#>
নিনা

যখন আমাকে
কোনও

2

থেকে Https://git-scm.com/docs/git-reset#Docamentation/git-reset.txt-Undoamergeorpullinsideadirtyirtyworkingtree

একীভূত হওয়া পূর্বাবস্থায় ফেলা বা একটি নোংরা কাজের গাছের ভিতরে টান

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

এমনকি আপনার কার্যক্ষম গাছটিতে স্থানীয় পরিবর্তন থাকতে পারে তবে আপনি নিরাপদে বলতে পারেন git pull যখন জানবেন যে অন্য শাখায় পরিবর্তনগুলি সেগুলির সাথে ওভারল্যাপ হয় না তখন আপনি ।

সংশ্লেষের ফলাফল পরিদর্শন করার পরে, আপনি দেখতে পাবেন যে অন্য শাখায় পরিবর্তনটি সন্তোষজনক নয়। দৌড়ানো git reset --hard ORIG_HEAD আপনাকে যেখানে ছিল সেখানে ফিরে যেতে দেবে, তবে এটি আপনার স্থানীয় পরিবর্তনগুলি বাতিল করবে, যা আপনি চান না। git reset --mergeআপনার স্থানীয় পরিবর্তনগুলি রাখে।

Https://stackoverflow.com/a/30345382/621690 এও দেখুন


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