গিট রিফ্লগ এবং লগ মধ্যে পার্থক্য কি?


158

ম্যান পেজটি বলেছে যে লগ কমিট লগগুলি দেখায় এবং রিফ্লগ রিফ্লগের তথ্য পরিচালনা করে। রিফ্লগ তথ্য হ'ল আসলে এবং লগটি কী করে না? লগ আরও বিস্তারিত মনে হয়।

উত্তর:


221

git logবর্তমান হেড এবং এর পূর্বসূরি প্রদর্শন করে। এটি হ'ল এটি প্রতিশ্রুতিবদ্ধ শিরোনামগুলি মুদ্রণ করে, তারপরে তার পিতামাতা, তার পিতামাতার, এবং আরও অনেক কিছু। এটি প্রতিটি প্রতিশ্রুতিবদ্ধদের পিতামাতাকে বারবার অনুসন্ধান করে রেপোর পূর্বপুরুষের মধ্য দিয়ে ফিরে যায়।

(বাস্তবে, কিছু কমিটের একাধিক প্যারেন্ট থাকে a আরও প্রতিনিধি লগ দেখতে, একটি কমান্ড ব্যবহার করুন like git log --oneline --graph --decorate)

git reflogহেডের পূর্বসূরিকে মোটেও অতিক্রম করে না। রিফ্লগ হ'ল যে শৃঙ্খলাগুলি নির্দেশ করে তার একটি আদেশযুক্ত তালিকা: এটি আপনার রেপোর ইতিহাসকে পূর্বাবস্থায় ফিরিয়ে দেয়। রিফ্লোগটি রেপো নিজেই অংশ নয় (এটি পৃথক পৃথকভাবে তাদের প্রতিশ্রুতিবদ্ধভাবে সংরক্ষণ করা হয়) এবং পুশ, ফেচ বা ক্লোনগুলির মধ্যে অন্তর্ভুক্ত নয়; এটি খাঁটি স্থানীয়।

একদিকে: রিফলগ বোঝার অর্থ প্রতিশ্রুতিবদ্ধ হওয়ার পরে আপনি আপনার রেপো থেকে ডেটা সত্যিই হারাতে পারবেন না। আপনি যদি দুর্ঘটনাক্রমে কোনও পুরানো প্রতিশ্রুতিতে রিসেট করেন, বা ভুলভাবে রিবেস করেন বা দৃশ্যত "অপসারণ" করে এমন কোনও অপারেশন করেন তবে আপনি git reset --hardআগের অবস্থার পুনরুদ্ধার করতে আপনি কোথায় ছিলেন এবং সেই রেফটিতে ফিরে এসেছিলেন তা দেখতে আপনি রিফ্লগটি ব্যবহার করতে পারেন । মনে রাখবেন, রেফগুলি কেবল প্রতিশ্রুতি দেয় না তবে এর পিছনে পুরো ইতিহাসকে বোঝায়।


26
সাবধানতার একটি শব্দ: আপনি কখনও কখনও ডেটা হারাতে পারেন কারণ রিফ্লগ এন্ট্রি চিরতরে অবিরত থাকে না - এগুলি কিছু শর্তের সাথে শুদ্ধ হয়ে যায়। এই উত্তরটি এবং গিট-রেফ্লোগ এবং গিট-গিসির জন্য দস্তাবেজগুলি দেখুন । সাধারণত, যদি 2 সপ্তাহ আগে ধ্বংসাত্মক অপারেশনটি না হয় তবে আপনি সম্ভবত নিরাপদে থাকতেন।
এমসিএমএলএক্সএক্সএক্সভিভি

@ এমসিএমএলএক্সএক্সভিভি একই রেপোর জন্য আমার দুটি স্থানীয় ফোল্ডার রয়েছে, আমি কি দুটি ফোল্ডারের জন্য রিফ্লাগগুলিকে একীভূত করতে পারি?
Tmx

@ টিএমএক্স, আমি আপনার কেসটি পুরোপুরি বুঝতে পারি না - একই রেপোর জন্য দুটি স্থানীয় ফোল্ডার বলতে কী বোঝ ? যদি আপনার কাছে একই রেপোর দুটি ক্লোন থাকে, যা আপ টু ডেট এবং আপনি তাদের সম্পাদনা ইতিহাসকে "মার্জ" করতে চান, .git/logs/refs/<branch>এন্ট্রিগুলির ফর্ম্যাট থাকে <old_rev> <new_rev> [...] <timestamp> [...]। আপনি টাইমস্ট্যাম্পের সাথে মিলিয়ে দেখার এবং বাছাই করতে চেষ্টা করতে পারেন। তবে কিছু লাইন ' পরেরটির সাথে new_revমেলে না old_rev, এই ক্ষেত্রে আমি প্রত্যাশা করি যে এই প্রত্যাবর্তনটি অবৈধ হবে। এরপরে আপনি সিক্যুয়েন্সটি "ফিক্স" করতে ভুয়া এন্ট্রি প্রবেশ করার চেষ্টা করতে পারেন তবে এটি আমার কাছে খুব ঝামেলা বলে মনে হচ্ছে ha
এমসিএমএলএক্সএক্সএক্সভিভি

62
  • git log রেফগুলি (হেড, ট্যাগ, রিমোট) থেকে কমিট লগটি অ্যাক্সেসযোগ্য দেখায়
  • git reflogএকটি হল রেকর্ড সব করে যে বা যে কোনো সময় আপনার রেপো উল্লেখ করা হয়েছে।

এই কারণেই git reflog(একটি স্থানীয় রেকর্ডিং যা পূর্বনির্ধারিতভাবে 90 দিনের পরে ছাঁটাই করা হয়) ব্যবহৃত হয় যখন আপনি "শাখা মুছে ফেলার মতো" কোনও "ধ্বংসাত্মক" অপারেশন করেন, যাতে সেই শাখার দ্বারা संदर्भিত SHA1 ফিরে পাওয়া যায়।
দেখুন git config:

gc.reflogexpire
gc.<pattern>.reflogexpire

git reflogমেয়াদোত্তীর্ণ এই সময়ের চেয়ে পুরানো রিফ্লগ এন্ট্রি সরিয়ে দেয়; 90 দিনের ডিফল্ট
" <pattern>" (উদাঃ " refs/stash") মাঝখানে থাকা সাথে সেটিংসটি কেবল সেই রেফগুলিতে প্রযোজ্য যা এর সাথে মেলে <pattern>

নিরাপত্তা জাল

git reflogপ্রায়শই " আপনার সুরক্ষা নেট " হিসাবে উল্লেখ করা হয়

সমস্যার ক্ষেত্রে, সাধারণ পরামর্শ, যখন গিট লগ আপনাকে সন্ধান করে না তা প্রদর্শন করে না:

" শান্ত থাকুন এবং ব্যবহার করুনgit reflog "

শান্ত থাকুন

আবার, রিফ্লোগ হল আপনার SHA1 এর স্থানীয় রেকর্ডিং।
এর বিপরীতে git log: আপনি যদি আপনার রেপোটিকে একটি প্রবাহী রেপোতে চাপান , আপনি একই দেখতে পাবেন git logতবে অগত্যা একই রকম হবে না git reflog


14

প্রো গিট বইয়ের ব্যাখ্যাreflog এখানে :

আপনি দূরে কাজ করার সময় গিটার ব্যাকগ্রাউন্ডে যা করে তার মধ্যে একটি হ'ল রিফ্লগ রাখা - আপনার হেড এবং শাখার রেফারেন্স গত কয়েক মাস ধরে রয়েছে এমন একটি লগ।

আপনি আপনার রিফ্লগটি ব্যবহার করে দেখতে পারেন git reflog:

$ git reflog
734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updated
d921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive.
1c002dd... HEAD@{2}: commit: added some blame and merge stuff
1c36188... HEAD@{3}: rebase -i (squash): updating HEAD
95df984... HEAD@{4}: commit: # This is a combination of two commits.
1c36188... HEAD@{5}: rebase -i (squash): updating HEAD
7e05da5... HEAD@{6}: rebase -i (pick): updating HEAD

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

reflogকমান্ড এছাড়াও reflog যে খুব বয়স থেকে এন্ট্রি মুছে ফেলতে অথবা এন্ট্রি মেয়াদ শেষ ব্যবহার করা যাবে। থেকে অফিসিয়াল লিনাক্স কার্নেল গীত ডকুমেন্টেশনreflog :

Subcommand expireপুরোনো reflog এন্ট্রি আলুবোখারা করতে ব্যবহৃত হয়।

রিফ্লগ থেকে একক এন্ট্রি মুছতে সাবকম্যান্ডটি ব্যবহার করুন deleteএবং সঠিক এন্ট্রি নির্দিষ্ট করুন (যেমন git reflog delete master@{2})।


কিন্তু git logআপনাকে কি একই তথ্য সরবরাহ করে না? দুঃখিত যদি এটি সুস্পষ্ট বলে মনে হয়, আমি জিআইটি-তে খুব নতুন এবং আমার প্রথম ওএমজির ঠিক আগে কিছু বেসিক পেতে চাই।
নাইচ

2
গিট লগ আপনার কমিটের একটি রেকর্ড । প্রো গিট বইতে বলা হয়েছে যে রিফ্লগটি আপনার রেফারেন্সগুলির (যা মূলত আপনার শাখা পয়েন্টার এবং আপনার HEADপয়েন্টার) রেকর্ড , এবং কোনটি তারা যে দিকে ইশারা করে তা প্রতিশ্রুতি দেয়। যে জানার জন্য? পার্শ্ব নোটে, logআপনাকে রিফ্লগ তথ্যও দেখাতে পারে, তবে আপনাকে এটির যুক্তি হিসাবে একটি বিশেষ বিকল্পের পতাকাটি পাস করতে হবে --walk-reflogs,।

3
এছাড়াও, যেহেতু আপনি একজন গিট শিক্ষানবিশ, তাই আমি আপনাকে প্রো গিট বইটি পড়ার জন্য অত্যন্ত পরামর্শ দিচ্ছি, এটিই আমি গিট সম্পর্কে যা শিখেছিলাম তার বেশিরভাগটাই শিখেছি। আমি অধ্যায়গুলি 1-3 এবং 6-6.5 এর সুপারিশ করি। আমি আন্তরিকভাবে প্রস্তাব দিচ্ছি যে আপনি কীভাবে ইন্টারেক্টিভ এবং অ-ইন্টারেক্টিভভাবে উভয়ই রিবাজ করবেন learn

8

আমি এটি সম্পর্কেও কৌতূহল ছিলাম এবং কেবল কিছুটা বিশদভাবে বর্ণনা এবং সংক্ষিপ্ত বিবরণ দিতে চাই:

  1. git logআপনি যে শাখায় রয়েছেন তার জন্য আপনার সমস্ত প্রতিশ্রুতিগুলির ইতিহাস দেখায়। একটি ভিন্ন শাখা চেকআউট করুন এবং আপনি একটি পৃথক অঙ্গীকারের ইতিহাস দেখতে পাবেন। আপনি যদি সমস্ত শাখার জন্য ইতিহাস প্রতিশ্রুতিবদ্ধ দেখতে চান তবে টাইপ করুন git log --all

  2. git reflogকাপকেক যেমনটি বলেছিল তেমনি আপনার উল্লেখগুলির একটি রেকর্ড দেখায়। প্রতিবার কোনও কমিট বা চেকআউট সম্পন্ন হওয়ার সময় একটি এন্ট্রি থাকে। দুটি শাখার মাঝে কয়েকবার পিছনে স্যুইচ করার চেষ্টা করুন এবং প্রতিটি চেকআউটের পরে git checkoutচালানো run git reflogআপনি প্রতিটি বার "চেকআউট" এন্ট্রি হিসাবে শীর্ষ এন্ট্রি আপডেট হতে দেখবেন। আপনি এই ধরণের এন্ট্রি দেখতে পাবেন না git log

তথ্যসূত্র: http://www.lornajane.net/posts/2014/git-log-all-branches


1

আমি গিট লগ এবং রিফ্লগের মধ্যে পার্থক্যটি একটি ব্যক্তিগত রেকর্ড এবং একটি পাবলিক রেকর্ডের মধ্যে পার্থক্য হিসাবে ভাবতে চাই।

প্রাইভেট বনাম পাবলিক

গিট রিফ্লোগের সাহায্যে এটি আপনি স্থানীয়ভাবে যা কিছু করেছেন তা ট্র্যাক করে। আপনি কি প্রতিশ্রুতিবদ্ধ? রিফ্লোগ এটি ট্র্যাক করে। আপনি কি হার্ড রিসেট করেছেন? রিফ্লোগ এটি ট্র্যাক করে। আপনি একটি অঙ্গীকার সংশোধন করেছেন ? রিফ্লোগ এটি ট্র্যাক করে। আপনি স্থানীয়ভাবে যা কিছু করেছেন, রেফ্লগে এটির জন্য একটি এন্ট্রি রয়েছে।

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

লগ পোলিশ হয়। রিফ্লোগটি ল্যাপিডারি ary

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

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

লগ পোলিশ হয়।  রিফ্লোগ ল্যাপিডারি ary

'সুরক্ষা নেট' ধারণাটিতে ফিরে যান

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


-6

প্রকৃতপক্ষে, রিফ্লোগ হল একটি উপাধি

 git log -g --abbrev-commit --pretty=oneline

সুতরাং উত্তরটি হওয়া উচিত: এটি একটি নির্দিষ্ট ক্ষেত্রে।


9
ইন git log, এর -gজন্য সংক্ষিপ্ত ফর্ম --walk-reflogs। সুতরাং, এটি কিছুই ব্যাখ্যা করে না।
অ্যাড্রিয়ান ডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.