নির্দিষ্ট সংশোধন যান


581

আমি একটি নির্দিষ্ট প্রকল্পের গিট সংগ্রহস্থলকে ক্লোন করেছি। আমি কি ফাইলগুলিকে প্রাথমিক অবস্থায় পরিণত করতে পারি এবং আমি যখন ফাইলগুলি পর্যালোচনা করি তখন 2, 3, 4 রিভিশনটিতে যেতে পারি ... সবচেয়ে সাম্প্রতিক? প্রকল্পটি কীভাবে বিকশিত হয়েছিল সে সম্পর্কে আমি একটি সংক্ষিপ্ত বিবরণ দেখতে চাই।

উত্তর:


871

git checkout <sha1>একটি নির্দিষ্ট প্রতিশ্রুতি চেক আউট ব্যবহার করুন ।


2
আপনি এটি করতে পারেন git log -n1। তবে যদি git checkoutব্যর্থ না হয় তবে এটি প্রচেষ্টা ব্যর্থ।
মার্সেলো ক্যান্টোস

2
এটা কাজ করে। আমাকে পুরো শা 1 ব্যবহার করতে হয়েছিল (আংশিক নয়)। এবং যদি আমি প্রকল্পটি দ্বিতীয় সংশোধন করতে চাই? git logএখন কেবল প্রথম প্রতিশ্রুতি দেখায়, আমি কি পরবর্তী প্রতিশ্রুতিটির sha1 খুঁজে পেতে পারি?
xralf

6
স্বতন্ত্রতার গ্যারান্টি দিতে আপনার কেবলমাত্র sha1 ব্যবহার করতে হবে। সম্ভবত আপনি একটি দুর্ভাগ্য কাকতালীয় ছিল। গিটের "পরবর্তী" প্রতিশ্রুতি সম্পর্কে কোনও ধারণা নেই; ইতিহাস হ'ল একটি ডিএজি যা সমস্ত তীরগুলি পিছনের দিকে নির্দেশ করে। আপনার git log --onelineরেফারেন্সের জন্য পাঠ্য ফাইলে আউটপুট চালানো এবং আটকে দেওয়া উচিত (সংক্ষিপ্ত আকারের এটির শংসাগুলি যা এটি সরবরাহ করে তা অনন্য হওয়ার গ্যারান্টিযুক্ত)। আরেকটি বিকল্প, যদি আপনার ইতিহাস রৈখিক হয়, কত করে প্রথম পর্যন্ত কমিট থেকে আছে জিনিসটা হয় masterএবং ব্যবহারের git checkout master~543(যদি সেখানে 543 করে হয়), তারপর git checkout master~542, ইত্যাদি
মার্সেলো Cantos

19
এবং কীভাবে "গিট চেকআউট <শ1>" থেকে বর্তমান প্রতিশ্রুতিতে ফিরে যেতে হবে?
ア レ ッ ク ス

6
@ আলেকান্দ্রসুপারট্র্যাম্প শাখাটি চেকআউট করুন।
মার্সেলো ক্যান্টোস

50

একটি নির্দিষ্ট সংস্করণে যেতে / কমান্ড নিম্নলিখিত কমান্ড চালাতে। আপনি পেতে পারেন হ্যাশ-কোডgit log --oneline -n 10

git reset --hard HASH-CODE

দ্রষ্টব্য - নির্দিষ্ট সংস্করণে পুনরায় সেট করার পরে / প্রতিশ্রুতিবদ্ধ আপনি চালাতে পারেন git pull --rebase, যদি আপনি বাতিল সমস্ত কমিটগুলি ফিরিয়ে আনতে চান।


1
মনে রাখবেন যে resetগ্রাফের কোনও নির্দিষ্ট পয়েন্ট কেবলমাত্র চেকআউট করে না এটি আপনার বর্তমানে চেক আউট শাখাটিও সরিয়ে ফেলবে
লিয়াম

এছাড়াও reset, আপনার সমস্ত মুলতুবি পরিবর্তনগুলি বাতিল করা হয়েছে।
উইলিয়াম কেএফ

2
--হ্যাশ পতাকা হ্যাশ বলার পরে যে কোনও কমিট মুছে ফেলবে .... সম্ভবত এখানে খুব সামান্য জোয়ার যোগ করতে চাই। আমি নিশ্চিত যে মানুষ ইতিহাস হারিয়েছে এবং কেন ভেবেছিল।
ইউরোস্কুইরেল

git pull --rebaseআপনার রেপোর জন্য কোনও রিমোট থাকলে এবং তা আপ টু ডেট থাকে কেবল তখনই কাজ করে ।
কিথ থম্পসন

19

আপনি প্রকল্পের ইতিহাসের মতো সরঞ্জাম সহ গ্রাফিকাল ভিউ পেতে পারেন gitk। শেষ ঘন্টা:

gitk --all

আপনি যদি একটি নির্দিষ্ট শাখা চেকআউট করতে চান:

git checkout <branch name>

নির্দিষ্ট অঙ্গীকারের জন্য, শাখার নামের পরিবর্তে SHA1 হ্যাশ ব্যবহার করুন। (দেখুন Treeishes মধ্যে গীত কমিউনিটি বুক , যা একটি ভাল পঠিত, আপনার গাছ নেভিগেট করার জন্য অন্যান্য অপশন দেখতে।)

git log বিস্তারিত বা সংক্ষিপ্ত ইতিহাস প্রদর্শন করার জন্য বিকল্পগুলির পুরো সেট রয়েছে।

প্রতিশ্রুতিবদ্ধ ইতিহাসে এগিয়ে যাওয়ার সহজ উপায় আমি জানি না । লিনিয়ার ইতিহাস সহ প্রকল্পগুলি সম্ভবত সমস্ত সাধারণ নয়। আপনার "এসভিএন" বা সিভিএসের মতো "রিভিশন" ধারণাটি গিতের সমস্ত কিছুকে মানচিত্র দেয় না।


2
সচেতন থাকুন: গিটি আপনাকে প্রকল্পের একক রৈখিক ইতিহাস দিয়ে মিথ্যা বলবে না। প্রকল্পটি বাস্তবে সেভাবে বিকশিত না হলে তা।
আন্দ্রেস জান ট্যাক

এগিয়ে যাওয়া যৌক্তিকভাবে অর্থহীন (এমনকি লিনিয়ার ইতিহাসেও), যেহেতু একটি অঙ্গীকার "ভবিষ্যতের" কোনও উল্লেখ করে না। সর্বোপরি, আপনি এমন সমস্ত প্রতিশ্রুতি সনাক্ত করতে পারেন যা অভিভাবক হিসাবে প্রশ্নে প্রতিশ্রুতিবদ্ধ রয়েছে। মনে মনে, পিছনে সরে যাওয়া একীভূত হওয়ার কারণে কোনও তুচ্ছ অনুশীলন নয়।
মার্সেলো ক্যান্টোস

5

কমিটের SHA1 কী ব্যবহার করে আপনি নিম্নলিখিতটি করতে পারেন:

  • প্রথমে একটি নির্দিষ্ট ফাইলের জন্য আপনি যে প্রতিশ্রুতিবদ্ধ তা সন্ধান করুন:

    git log -n <# commits> <file-name>

    এটি, আপনার উপর ভিত্তি করে <# commits> , একটি নির্দিষ্ট ফাইলের জন্য কমিটের একটি তালিকা তৈরি করবে।

    টিপ: আপনি কী প্রতিশ্রুতি সন্ধান করছেন তা যদি নিশ্চিত না হন তবে নিম্নলিখিত কমান্ডটি ব্যবহার করার একটি উত্তম উপায়: git diff <commit-SHA1>..HEAD <file-name> । এই কমান্ডটি কমিটের বর্তমান সংস্করণ এবং একটি নির্দিষ্ট ফাইলের জন্য প্রতিশ্রুতি দেওয়ার পূর্ববর্তী সংস্করণের মধ্যে পার্থক্য প্রদর্শন করবে show

    দ্রষ্টব্য: কমিটের SHA1 কী git log -nএর তালিকায় ফর্ম্যাট করা আছে :

সমর্পণ করা <SHA1 id>

  • দ্বিতীয়ত, পছন্দসই সংস্করণটি চেকআউট করুন:

    আপনি যে পছন্দসই প্রতিশ্রুতি / সংস্করণ চান তা যদি খুঁজে পেয়ে থাকেন তবে কেবল কমান্ডটি ব্যবহার করুন: git checkout <desired-SHA1> <file-name>

    এটি আপনার মঞ্চে নির্দিষ্ট করা ফাইলটির সংস্করণ স্থাপন করবে। স্টেজিং এরিয়া থেকে বেরিয়ে আসার জন্য কমান্ডটি কেবল ব্যবহার করুন:reset HEAD <file-name>

দূরবর্তী সংগ্রহস্থলের দিকে নির্দেশিত যেখানে ফিরে যেতে, কেবল কমান্ডটি ব্যবহার করুন: git checkout HEAD <file-name>


2

আমি এমন পরিস্থিতিতে ছিলাম যেখানে আমাদের একটি মাস্টার শাখা আছে এবং তারপরে আর একটি শাখা 17.0 নামে পরিচিত এবং এই 17.0 এর অভ্যন্তরে একটি কমিট হ্যাশ নেই "XYZ" বলে নেই । এবং গ্রাহককে সেই এক্সওয়াইজেড রিভিশন পর্যন্ত একটি বিল্ড দেওয়া হবে। এখন আমরা একটি বাগ জুড়ে এসেছি এবং এটি সেই গ্রাহকের জন্য সমাধান করা দরকার। সুতরাং আমাদের সেই "xyz" হ্যাশ পর্যন্ত সেই গ্রাহকের জন্য আলাদা শাখা তৈরি করা দরকার। আমি এখানে এটি কিভাবে।

প্রথমে আমি আমার স্থানীয় মেশিনে সেই গ্রাহকের নামের একটি ফোল্ডার তৈরি করেছি। এই ফোল্ডারটির ভিতরে কমান্ডের পরে ফোল্ডারটি সমস্যা তৈরি হয়ে গেলে গ্রাহকের নামটি "এএএ" হয়:

  1. গিট ইনিশ
  2. গিট ক্লোন এই আদেশের পরে আপনি মাস্টার শাখায় থাকবেন। সুতরাং কাঙ্ক্ষিত শাখায় স্যুইচ করুন
  3. গিট চেকআউট 17.0 এটি আপনাকে সেই শাখায় নিয়ে আসবে যেখানে আপনার প্রতিশ্রুতিবদ্ধ উপস্থিত রয়েছে
  4. গিট চেকআউটটি হ্যাশ প্রতিশ্রুতি না দেওয়া পর্যন্ত এটি আপনার সংগ্রহস্থলটি নেবে। আপনার শাখার নাম দেখুন এটি পরিবর্তন করে নাম্বার নংয়ের হ্যাশ। এখন এই হ্যাশটির একটি শাখার নাম দিন
  5. গিট শাখা এবিসি এটি আপনার স্থানীয় মেশিনে একটি নতুন শাখা তৈরি করবে।
  6. গিট চেকআউট এবিসি
  7. গিট পুশ অরিজিন এবিসি এটি এই শাখাটিকে দূরবর্তী সংগ্রহস্থলে ঠেলে দেবে এবং গিট সার্ভারে একটি শাখা তৈরি করবে। তুমি পেরেছ.

1

একটি উপায় হ'ল প্যাচগুলিতে করা সমস্ত কমিট তৈরি করা। প্রাথমিক প্রতিশ্রুতি চেকআউট করুন এবং তারপরে প্যাচগুলি পড়ার পরে প্রয়োগ করুন।

ব্যবহার git format-patch <initial revision>এবং তারপর git checkout <initial revision>। আপনার পরিচালকের মধ্যে ফাইলের একটি স্তূপ পাওয়া উচিত যা চারটি অঙ্কের সাথে শুরু হয় যা প্যাচগুলি।

আপনি যখন আপনার রিভিশনটি পড়া শেষ করেন ঠিক তেমনটি করুন git apply <filename>যা দেখতে হবে git apply 0001-* এবং গণনা করা ।

তবে আমি সত্যিই অবাক হয়েছি কেন আপনি কেবল তার পরিবর্তে প্যাচগুলি পড়তে চান না? দয়া করে আপনার মন্তব্যে এটি পোস্ট করুন কারণ আমি আগ্রহী।

গিট ম্যানুয়ালটি আমাকে এটি দেয়:

git show next~10:Documentation/README

ডকুমেন্টেশন / README ফাইলের বিষয়বস্তুগুলি দেখায় যেহেতু তারা পরবর্তী শাখার 10 তম শেষ কমিটিতে বর্তমান ছিল।

আপনি দেখতে পেতে পারেন git blame filenameযা আপনাকে এমন একটি তালিকা দেয় যেখানে প্রতিটি লাইন কমিট হ্যাশ + লেখকের সাথে যুক্ত।


1

একটি নির্দিষ্ট প্রতিশ্রুতিবদ্ধ কোডটি পেতে আপনার সেই কমিটের হ্যাশ কোড দরকার । আপনি এই হ্যাশ কোডটি দুটি উপায়ে পেতে পারেন:

  1. আপনার গিথুব / গিটল্যাব / বিটবকেট অ্যাকাউন্ট থেকে এটি পান। (এটি আপনার কমিট ইউআরএল, যেমন: github.com / ব্যবহারকারীর / মাই_প্রজেক্ট / কমিট / কমিট_হ্যাশ_কোড ) এ রয়েছে, বা আপনি পারেন
  2. git logএবং সেই শাখায় আপনার সাম্প্রতিক কমিটগুলি পরীক্ষা করুন। এটি আপনাকে আপনার প্রতিশ্রুতি দেওয়ার হ্যাশ কোড এবং আপনি নিজের কোডটি সম্পাদন করার সময় আপনি যে বার্তাটি রেখেছিলেন তা প্রদর্শিত হবে। শুধু কপি করুন এবং তারপর করুনgit checkout commit_hash_code

সেই কোডটিতে যাওয়ার পরে, আপনি যদি এটিতে কাজ করতে চান এবং পরিবর্তন করতে চান তবে আপনার সাথে অন্য একটি শাখা তৈরি করা উচিত git checkout -b <new-branch-name>, অন্যথায়, পরিবর্তনগুলি ধরে রাখা যাবে না।


0

প্রতিশ্রুতি পরীক্ষা করার জন্য (এনবি আপনি অতীতের দিকে তাকিয়ে আছেন!)।

  • গিট চেকআউট "কমিটহ্যাশ"

কোনও প্রতিশ্রুতি থেকে নির্মমভাবে পুনঃসূচনা করার জন্য এবং সম্ভবত আপনি যে বিশৃঙ্খলা তৈরি করেছিলেন সেগুলি পরবর্তী শাখাগুলি মুছতে।

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