উত্তর:
git log
বর্তমান হেড এবং এর পূর্বসূরি প্রদর্শন করে। এটি হ'ল এটি প্রতিশ্রুতিবদ্ধ শিরোনামগুলি মুদ্রণ করে, তারপরে তার পিতামাতা, তার পিতামাতার, এবং আরও অনেক কিছু। এটি প্রতিটি প্রতিশ্রুতিবদ্ধদের পিতামাতাকে বারবার অনুসন্ধান করে রেপোর পূর্বপুরুষের মধ্য দিয়ে ফিরে যায়।
(বাস্তবে, কিছু কমিটের একাধিক প্যারেন্ট থাকে a আরও প্রতিনিধি লগ দেখতে, একটি কমান্ড ব্যবহার করুন like git log --oneline --graph --decorate
)
git reflog
হেডের পূর্বসূরিকে মোটেও অতিক্রম করে না। রিফ্লগ হ'ল যে শৃঙ্খলাগুলি নির্দেশ করে তার একটি আদেশযুক্ত তালিকা: এটি আপনার রেপোর ইতিহাসকে পূর্বাবস্থায় ফিরিয়ে দেয়। রিফ্লোগটি রেপো নিজেই অংশ নয় (এটি পৃথক পৃথকভাবে তাদের প্রতিশ্রুতিবদ্ধভাবে সংরক্ষণ করা হয়) এবং পুশ, ফেচ বা ক্লোনগুলির মধ্যে অন্তর্ভুক্ত নয়; এটি খাঁটি স্থানীয়।
একদিকে: রিফলগ বোঝার অর্থ প্রতিশ্রুতিবদ্ধ হওয়ার পরে আপনি আপনার রেপো থেকে ডেটা সত্যিই হারাতে পারবেন না। আপনি যদি দুর্ঘটনাক্রমে কোনও পুরানো প্রতিশ্রুতিতে রিসেট করেন, বা ভুলভাবে রিবেস করেন বা দৃশ্যত "অপসারণ" করে এমন কোনও অপারেশন করেন তবে আপনি git reset --hard
আগের অবস্থার পুনরুদ্ধার করতে আপনি কোথায় ছিলেন এবং সেই রেফটিতে ফিরে এসেছিলেন তা দেখতে আপনি রিফ্লগটি ব্যবহার করতে পারেন । মনে রাখবেন, রেফগুলি কেবল প্রতিশ্রুতি দেয় না তবে এর পিছনে পুরো ইতিহাসকে বোঝায়।
.git/logs/refs/<branch>
এন্ট্রিগুলির ফর্ম্যাট থাকে <old_rev> <new_rev> [...] <timestamp> [...]
। আপনি টাইমস্ট্যাম্পের সাথে মিলিয়ে দেখার এবং বাছাই করতে চেষ্টা করতে পারেন। তবে কিছু লাইন ' পরেরটির সাথে new_rev
মেলে না old_rev
, এই ক্ষেত্রে আমি প্রত্যাশা করি যে এই প্রত্যাবর্তনটি অবৈধ হবে। এরপরে আপনি সিক্যুয়েন্সটি "ফিক্স" করতে ভুয়া এন্ট্রি প্রবেশ করার চেষ্টা করতে পারেন তবে এটি আমার কাছে খুব ঝামেলা বলে মনে হচ্ছে ha
git log
রেফগুলি (হেড, ট্যাগ, রিমোট) থেকে কমিট লগটি অ্যাক্সেসযোগ্য দেখায়git reflog
একটি হল রেকর্ড সব করে যে বা যে কোনো সময় আপনার রেপো উল্লেখ করা হয়েছে।এই কারণেই git reflog
(একটি স্থানীয় রেকর্ডিং যা পূর্বনির্ধারিতভাবে 90 দিনের পরে ছাঁটাই করা হয়) ব্যবহৃত হয় যখন আপনি "শাখা মুছে ফেলার মতো" কোনও "ধ্বংসাত্মক" অপারেশন করেন, যাতে সেই শাখার দ্বারা संदर्भিত SHA1 ফিরে পাওয়া যায়।
দেখুন git config
:
gc.reflogexpire
gc.<pattern>.reflogexpire
git reflog
মেয়াদোত্তীর্ণ এই সময়ের চেয়ে পুরানো রিফ্লগ এন্ট্রি সরিয়ে দেয়; 90 দিনের ডিফল্ট
"<pattern>
" (উদাঃ "refs/stash
") মাঝখানে থাকা সাথে সেটিংসটি কেবল সেই রেফগুলিতে প্রযোজ্য যা এর সাথে মেলে<pattern>
।
git reflog
প্রায়শই " আপনার সুরক্ষা নেট " হিসাবে উল্লেখ করা হয়
সমস্যার ক্ষেত্রে, সাধারণ পরামর্শ, যখন গিট লগ আপনাকে সন্ধান করে না তা প্রদর্শন করে না:
আবার, রিফ্লোগ হল আপনার SHA1 এর স্থানীয় রেকর্ডিং।
এর বিপরীতে git log
: আপনি যদি আপনার রেপোটিকে একটি প্রবাহী রেপোতে চাপান , আপনি একই দেখতে পাবেন git log
তবে অগত্যা একই রকম হবে না git reflog
।
প্রো গিট বইয়ের ব্যাখ্যা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
আপনাকে কি একই তথ্য সরবরাহ করে না? দুঃখিত যদি এটি সুস্পষ্ট বলে মনে হয়, আমি জিআইটি-তে খুব নতুন এবং আমার প্রথম ওএমজির ঠিক আগে কিছু বেসিক পেতে চাই।
HEAD
পয়েন্টার) রেকর্ড , এবং কোনটি তারা যে দিকে ইশারা করে তা প্রতিশ্রুতি দেয়। যে জানার জন্য? পার্শ্ব নোটে, log
আপনাকে রিফ্লগ তথ্যও দেখাতে পারে, তবে আপনাকে এটির যুক্তি হিসাবে একটি বিশেষ বিকল্পের পতাকাটি পাস করতে হবে --walk-reflogs
,।
আমি এটি সম্পর্কেও কৌতূহল ছিলাম এবং কেবল কিছুটা বিশদভাবে বর্ণনা এবং সংক্ষিপ্ত বিবরণ দিতে চাই:
git log
আপনি যে শাখায় রয়েছেন তার জন্য আপনার সমস্ত প্রতিশ্রুতিগুলির ইতিহাস দেখায়। একটি ভিন্ন শাখা চেকআউট করুন এবং আপনি একটি পৃথক অঙ্গীকারের ইতিহাস দেখতে পাবেন। আপনি যদি সমস্ত শাখার জন্য ইতিহাস প্রতিশ্রুতিবদ্ধ দেখতে চান তবে টাইপ করুন git log --all
।
git reflog
কাপকেক যেমনটি বলেছিল তেমনি আপনার উল্লেখগুলির একটি রেকর্ড দেখায়। প্রতিবার কোনও কমিট বা চেকআউট সম্পন্ন হওয়ার সময় একটি এন্ট্রি থাকে। দুটি শাখার মাঝে কয়েকবার পিছনে স্যুইচ করার চেষ্টা করুন এবং প্রতিটি চেকআউটের পরে git checkout
চালানো run git reflog
আপনি প্রতিটি বার "চেকআউট" এন্ট্রি হিসাবে শীর্ষ এন্ট্রি আপডেট হতে দেখবেন। আপনি এই ধরণের এন্ট্রি দেখতে পাবেন না git log
।
তথ্যসূত্র: http://www.lornajane.net/posts/2014/git-log-all-branches
আমি গিট লগ এবং রিফ্লগের মধ্যে পার্থক্যটি একটি ব্যক্তিগত রেকর্ড এবং একটি পাবলিক রেকর্ডের মধ্যে পার্থক্য হিসাবে ভাবতে চাই।
গিট রিফ্লোগের সাহায্যে এটি আপনি স্থানীয়ভাবে যা কিছু করেছেন তা ট্র্যাক করে। আপনি কি প্রতিশ্রুতিবদ্ধ? রিফ্লোগ এটি ট্র্যাক করে। আপনি কি হার্ড রিসেট করেছেন? রিফ্লোগ এটি ট্র্যাক করে। আপনি একটি অঙ্গীকার সংশোধন করেছেন ? রিফ্লোগ এটি ট্র্যাক করে। আপনি স্থানীয়ভাবে যা কিছু করেছেন, রেফ্লগে এটির জন্য একটি এন্ট্রি রয়েছে।
এটি লগ জন্য সত্য নয়। আপনি যদি কোন অঙ্গীকার সংশোধন করেন তবে লগটি কেবল নতুন প্রতিশ্রুতি দেখায়। আপনি যদি পুনরায় সেট করেন এবং আপনার ইতিহাসে কয়েকটি কমিট ফিরে যান তবে আপনি যে সমস্ত কমিটগুলি এড়িয়ে গেছেন সেগুলি লগটিতে প্রদর্শিত হবে না। আপনি যখন নিজের পরিবর্তনগুলি অন্য বিকাশকারী বা গিটহাব বা অন্য কোনও কিছুতে চাপুন , কেবলমাত্র লগটিতে ট্র্যাক করা সামগ্রী প্রদর্শিত হবে। অন্য বিকাশকারীদের কাছে এটি দেখতে দেখতে রিসেটগুলি কখনও ঘটেনি বা সংশোধনগুলি কখনও ঘটেনি।
হ্যাঁ, আমি 'ব্যক্তিগত বনাম পাবলিক' উপমা পছন্দ করি। অথবা রিফ্লগ উপমা তুলনায় আরও ভাল লগ হ'ল পালিশ বনাম ল্যাপিডারি। রিফ্লোগ আপনার সমস্ত পরীক্ষা এবং ত্রুটি দেখায়। লগটি আপনার কাজের ইতিহাসের একটি পরিষ্কার এবং পালিশ সংস্করণ দেখায়।
পয়েন্টটি জোর দেওয়ার জন্য এই চিত্রটি একবার দেখুন। ভান্ডারটি আরম্ভ করার পর থেকেই বেশ কয়েকটি সংশোধনী এবং পুনরায় সেট করা হয়েছে। রিফ্লোগ এটি সমস্ত দেখায়। তবুও লগ কমান্ডটি দেখে মনে হচ্ছে যেন রেপোর বিরুদ্ধে কেবল একবারই প্রতিশ্রুতিবদ্ধ হয়:
এছাড়াও, যেহেতু রিফ্লোগ আপনার সংশোধিত জিনিসগুলি এবং আপনার পুনরায় সেট করার প্রতিশ্রুতি রাখে তাই এটি আপনাকে ফিরে যেতে এবং সেই প্রতিশ্রুতিগুলি সন্ধান করার অনুমতি দেয় কারণ এটি আপনাকে প্রতিশ্রুতিবদ্ধ আইডি দেবে। ধরে নিই যে আপনার সংগ্রহস্থলটি পুরানো কমিটগুলি থেকে মুছে যায়নি, যা আপনাকে লগগুলিতে আর আইটেমগুলিকে পুনরুত্থিত করতে দেয়। এভাবেই কখনও কখনও কারও ত্বক সংরক্ষণ করার পরে রিফ্লোগটি শেষ হয় যখন তাদের অজান্তেই তারা হারিয়ে ফেলেছিল এমন কিছু ভেবে ফিরে আসে।
প্রকৃতপক্ষে, রিফ্লোগ হল একটি উপাধি
git log -g --abbrev-commit --pretty=oneline
সুতরাং উত্তরটি হওয়া উচিত: এটি একটি নির্দিষ্ট ক্ষেত্রে।
git log
, এর -g
জন্য সংক্ষিপ্ত ফর্ম --walk-reflogs
। সুতরাং, এটি কিছুই ব্যাখ্যা করে না।