কোনও ফাইলের পুরানো সংস্করণটি দেখার জন্য কি দ্রুত গিট কমান্ড রয়েছে?


1509

গিট -এ কোনও নির্দিষ্ট ফাইলের নির্দিষ্ট সংস্করণটি দেখতে পাবেন (হয় স্টডআউটে ডাম্পড, অথবা $PAGERঅথবা $EDITOR)



আপনি যদি এই প্রশ্নে এসেছেন কারণ আপনি বাইনারি ফাইলের পুরানো সংস্করণ (যেমন একটি চিত্র) পরীক্ষা করতে চান, তবে পুরানো প্রতিশ্রুতিতে একটি চেকআউট করা ভাল, আপনার কী দেখার দরকার তা দেখুন, এবং তারপরে ফিরে আসুন। তার জন্য git checkout <sha1-of-the-commit-you-need>, তারপরে, করুনgit checkout HEAD
হোমোরো এসেমেরাল্ডো

উত্তর:


1730

আপনি git showসংগ্রহস্থলের মূল থেকে কোনও পাথ ( ./বা ../আপেক্ষিক পথের জন্য) ব্যবহার করতে পারেন :

$ git show REVISION:path/to/file

REVISIONআপনার আসল সংশোধন দিয়ে প্রতিস্থাপন করুন (গিট কমিট এসএইচএ, কোনও ট্যাগের নাম, একটি শাখার নাম, আত্মীয় প্রতিশ্রুতিবদ্ধ নাম, বা গিটে প্রতিশ্রুতি সনাক্তকরণের অন্য কোনও উপায়)

উদাহরণস্বরূপ, <repository-root>/src/main.c4 টি কমিট আগে ফাইলের সংস্করণটি দেখতে , ব্যবহার করুন:

$ git show HEAD~4:src/main.c

উইন্ডোজের গিটের জন্য বর্তমান ডিরেক্টরি সম্পর্কিত পাথগুলিতেও ফরোয়ার্ড স্ল্যাশ প্রয়োজন । আরও তথ্যের জন্য, ম্যান পৃষ্ঠাটি দেখুন git-show


5
এটি আসলে কাজ করে বলে মনে হচ্ছে না - আপনি কি চেষ্টা করে দেখেছেন? "গিট শো হেড: পাথ / টু / ফাইল.সি" এর জন্য, আমি একটি "দ্ব্যর্থহীন যুক্তি" ত্রুটি পেয়েছি।
মাইক

2
গিট রেপো শীর্ষ থেকে পুরো পথটি হতে হবে
richq

20
আপনি যদি উইন্ডোতে থাকেন তবে এটি কোনও পাথ বিভাজনকারী জিনিস হতে পারে; যদি আমি গিডিটি হেড: দির \ সাবডির \ ফাইলটি দেখি, তবে আমি অবিসংবাদিত আর্গুমেন্টটি পেয়েছি। আমি যদি গিট শিরোনাম: dir / subdir / ফাইল প্রদর্শন করি তবে এটি প্রত্যাশার মতো কাজ করে।
ম্যাট ম্যাকমিন

12
এর পরে আপনার যে পথটি প্রদান করতে হবে তা হ'ল গিট সংগ্রহস্থলের মূল থেকে। (এটি একটি উত্তর হিসাবে নীচে দেওয়া হয়েছিল তবে আমি মনে করি এটি এই উত্তর সম্পর্কে একটি মন্তব্য হিসাবে লক্ষ্য করা হয়েছিল)
ম্যাট্রিক্সফ্রাগ

9
আপনি যদি এটি কোনও ভিম ​​বিভক্তিতে দেখতে চান যাতে তারা একসাথে স্ক্রোল করে, আমি কীভাবে এটি করব তা দেখিয়ে একটি ছোট্ট ব্লগ পোস্ট লিখেছিলাম wrote
ফ্ল্যাভিউ

257

তারিখ অনুসারে এটি করা দেখে মনে হচ্ছে:

git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt

দ্রষ্টব্যটির HEAD@{2013-02-25}অর্থ এই যে " এইচডিএইড 2013-02-25 এ ছিল" এই ভাণ্ডারে ( রিফ্লগ ব্যবহার করে ) "ইতিহাসের এই শাখায় 2013-02-25 এর আগে শেষ প্রতিশ্রুতি নয়"।


5
অসাধারণ. গিথুব গিয়ে প্রতিশ্রুতি না দিয়ে আমার সময় সাশ্রয় করে।
ফিজার খান

ফাইলপথের "ডট" আমার সমস্যা ছিল। ধন্যবাদ!
টমাসচারদ

5
আপনি যদি কোনও শাখায় থাকেন তবেmasterHEAD@{2013-02-25}
515

1
আপনি সময় অন্তর্ভুক্ত করতে পারেন, তাই না git log --since='2016-04-28 23:59:59 +0100'?
ডাম্বলডেড

7
এই সিনট্যাক্সটি রিফ্লগটি ব্যবহার করে এমনটি গুরুত্বপূর্ণ এবং এটি দৃ strongly়ভাবে হাইলাইট করা উচিত, কারণ রিফ্লোগটিতে সমস্ত কমিট থাকে নাBlog.endPoint.com/2014/05/git-checkout-at-specific-date.html
এলিস হিটন

113

আপনি যদি জিইউআই পছন্দ করেন তবে আপনি গিটক ব্যবহার করতে পারেন:

  1. গিটক দিয়ে শুরু করুন:

    gitk /path/to/file
    
  2. পর্দার উপরের অংশে সংশোধন চয়ন করুন, উদাহরণস্বরূপ বা তারিখ অনুসারে by ডিফল্টরূপে, পর্দার নীচের অংশটি সেই সংশোধনের জন্য পৃথক দেখায়, ("প্যাচ" রেডিও বোতামের সাথে সম্পর্কিত)।

  3. নির্বাচিত সংশোধনের জন্য ফাইলটি দেখতে:

    • "ট্রি" রেডিও বোতামে ক্লিক করুন। এটি সেই সংশোধনীতে ফাইল গাছের মূল দেখাবে।
    • আপনার ফাইল থেকে নিচে ড্রিল।

7
এটি টিগের সাথেও কাজ করে , যা গিট রেপো দর্শকের জন্য একটি অভিশাপ।
ম্যাথু জি

1
@ পল স্লোকুম: হতে পারে কারণ এই আদেশটি একটি প্রচলিত আদেশ নয়, গিটের অন্তর্নির্মিত নয়। আমি মনে করি এই কমান্ডটি কেবল উইন্ডোজের জন্যই কাজ করে।
এনভিল

আপনি যদি আপনার গিট সংগ্রহস্থলের মূল থেকে শুরু করেন তবে এটি কেবল কাজ করে বলে মনে রাখবেন।
মার্ক

আপনি gitk এছাড়াও আপনি এই শর্টকাট ব্যবহার করতে পারে একটি নির্দিষ্ট সংস্করণ বিরুদ্ধে চেক করতে চাইলে: gitk REVISION /path/to/file। আপনি উদাহরণস্বরূপ কোনও নির্দিষ্ট সংস্করণের বিপরীতে পরীক্ষা করতে চাইলে এটি কার্যকর হতে পারে।
খ্রিস্টান.ডি

89

আপনি কমান্ড সহ একটি commit hash(প্রায়শই ডাকাও commit ID) নির্দিষ্ট করতে পারেন ।git show


সংক্ষেপে

git show <commitHash>:/path/to/file


ধাপে ধাপে

  1. এর সাথে প্রদত্ত ফাইলের জন্য সমস্ত পরিবর্তনের লগ প্রদর্শন করুন git log /path/to/file
  2. প্রদর্শিত পরিবর্তনের তালিকায় এটি (06c98 ... কমিটের হ্যাশ হওয়া) এর commit hashমতো দেখায়commit 06c98...
  3. কপি করুন commit hash
  4. পদক্ষেপ 3 এবং পদক্ষেপ 1 এর git show <commitHash>:/path/to/fileব্যবহার করে কমান্ডটি চালান Runcommit hashpath/to/file

দ্রষ্টব্য:./ আপেক্ষিক পথ নির্দিষ্ট করার সময় যুক্ত করা গুরুত্বপূর্ণ মনে হয়, যেমন git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html


1
আপনি যদি ফাইল করার পথ জানেন না তবে git show <SHA1> --name-onlyএটি পেতে ব্যবহার করুন ।
টিইনা

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

43

জিম হুনজিকার ছাড়াও উত্তর ,

আপনি পুনর্বিবেচনা থেকে ফাইলটি এক্সপোর্ট করতে পারেন হিসাবে,

git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt

আশাকরি এটা সাহায্য করবে :)


23

কোনও ফাইলের পুরানো সংশোধনগুলির সাথে তফাতগুলি দ্রুত দেখতে:

git show -1 filename.txt > ফাইলের সর্বশেষ সংশোধনের সাথে তুলনা করতে

git show -2 filename.txt > ২ য় সর্বশেষ সংশোধনের বিপরীতে তুলনা করতে

git show -3 fielname.txt > সর্বশেষ 3 য় সর্বশেষ সংশোধনের সাথে তুলনা করতে


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

18

git log -pআপনাকে কেবল প্রতিশ্রুতিবদ্ধ লগগুলিই নয় প্রতিটি প্রতিশ্রুতির ভিন্নতা (মার্জ কমিটস বাদে) প্রদর্শন করবে। তারপরে আপনি টিপুন /, ফাইলের নাম লিখুন এবং টিপতে পারেন enter। টিপুন nবা pপরবর্তী / পূর্ববর্তী ঘটনাটিতে যেতে। এইভাবে আপনি কেবল ফাইলের পরিবর্তনগুলি দেখতে পাবেন না তবে প্রতিশ্রুতিবদ্ধ তথ্যও পাবেন।


3
দেখে মনে হচ্ছে git log -pmমার্জ কমিটগুলিও প্রদর্শন করবে।
সানবার

2
আপনি git log -p -- filename.txtকেবলমাত্র কাঙ্ক্ষিত ফাইলে ইতিহাসকে সীমাবদ্ধ রাখতে চালাতে পারেন ।
জিন পল

3

আপনি আলাদা আলাদা ফাইলগুলিতে ফাইলের সমস্ত সংস্করণ ডাম্প করতে এই জাতীয় স্ক্রিপ্ট ব্যবহার করতে পারেন:

যেমন

git_dump_all_versions_of_a_file.sh path/to/somefile.txt

অন্য অনুরূপ প্রশ্নের উত্তর হিসাবে স্ক্রিপ্টটি এখানে পান


1
git_root, git_log_shortএবং git_log_message_for_commitঅনুপস্থিত।
মোগসি

ভালো বল ধরা! আমি এই উত্তরটি 2 টি বিভিন্ন স্পটে ডাবল করে পোস্ট করেছি, এবং এইটি সরিয়েছি এবং অন্যটির সাথে লিঙ্ক করেছি, যেখানে লোকেরা আমাকে এই সম্পর্কে আগে বলেছিল ... ধন্যবাদ @ মোগসি!
ব্র্যাড পার্কস

এই স্ক্রিপ্ট খুব দরকারী!
এক্সএমএন

3

উপায় 1: (আমি এইভাবে পছন্দ করি)

  1. এর সাথে কমিট আইডি সন্ধান করুন :git reflog
  2. প্রতিশ্রুতিবদ্ধ থেকে ফাইল তালিকা git diff-tree --no-commit-id --name-only -r <commitHash>

উদাহরণ: git diff-tree --no-commit-id --name-only -r d2f9ba4// "d2f9ba4" "১" থেকে কমিট আইডি

  1. কমান্ড সহ প্রয়োজনীয় ফাইলটি খুলুন:

git show <commitHash>:/path/to/file

উদাহরণ: git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift// "এসসিআর / ..." হ'ল "২" থেকে ফাইল পথ

উপায় 2:

  1. এর সাথে কমিট আইডি সন্ধান করুন :git reflog
  2. এই প্রতিশ্রুতিটি পুনরায় সেট করুন: git reset --hard %commit ID%

গিট রিসেট - চার্জ c14809fa

  1. যে কোনও অপ্রয়োজনীয় পরিবর্তন করুন এবং প্রয়োজনীয় শাখায় নতুন করে প্রতিশ্রুতিবদ্ধ :)

0

প্রদত্ত সংশোধন থেকে একাধিক ফাইল আনতে সহায়ক

মার্জ সংঘাতগুলি সমাধান করার চেষ্টা করার সময়, এই সহায়কটি খুব দরকারী:

#!/usr/bin/env python3

import argparse
import os
import subprocess

parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
    file_relative = os.path.relpath(os.path.abspath(path), toplevel)
    base, ext = os.path.splitext(path)
    new_path = base + '.old' + ext
    with open(new_path, 'w') as f:
        subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)

গিটহাব উজানের দিকে

ব্যবহার:

git-show-save other-branch file1.c path/to/file2.cpp

ফলাফল: নিম্নলিখিত ফাইলগুলির বিকল্প সংস্করণ রয়েছে:

file1.old.c
path/to/file2.old.cpp

এইভাবে, আপনি ফাইল এক্সটেনশানটি রাখেন যাতে আপনার সম্পাদক অভিযোগ না করে এবং সহজেই নতুনটির ঠিক পাশেই পুরানো ফাইলটি খুঁজে পেতে পারেন।


@ মিকি পেরলস্টাইন যদি আপনি আরও কার্যকরভাবে একই ইন্টারফেসটি অর্জন করতে পারেন তবে আমি সবাই কান দিই।
সিরো সান্তিলি :3 病毒 审查 六四 事件

হয়তো আমি বুঝতে পারি না (এবং যদি তাই হয় তবে আমার ক্ষমা চাই) তবে এটি কেবল নয়: "গিট শো সংস্করণ: ./ পথ> নতুন_পথ"?
মিকি পার্লস্টাইন 26'19

@ মিকিপার্লস্টেইন হাই, হ্যাঁ, আমার কমান্ডটি সেই সি এল এল তৈরি করে, তবে এটি একাধিক ফাইলের উপরে চলে যায় এবং ইনপুট থেকে আউটপুট নাম তৈরি করে, সুতরাং আপনাকে খুব বেশি টাইপ করতে হবে না। অবশ্যই বিপ্লবী কিছুই নয়, তবে সুবিধাজনক।
সিরো সান্তিলি :16 病毒 审查 六四 事件 法轮功
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.