দুটি গিট কমিটের মধ্যে পরিবর্তিত সমস্ত ফাইলের একটি তালিকা কীভাবে পাবেন?


178

আমলাতন্ত্রের কারণে, আমার রিপোর্টে আমার পরিবর্তিত সমস্ত ফাইলের একটি তালিকা পাওয়া দরকার (আমি বিদ্যমান উত্স কোড দিয়ে শুরু করেছি)।

এই তালিকাটি পেতে আমার কী দৌড়াতে হবে?


34
"আমলাতন্ত্রের কারণে" এক্সডি
পিটিএম

উত্তর:


238

প্রদত্ত এসএইচএ এবং আপনার বর্তমান প্রতিশ্রুতিগুলির মধ্যে পরিবর্তিত ফাইলগুলির জন্য:

git diff --name-only <starting SHA> HEAD

বা যদি আপনি পরিবর্তিত-তবে-এখনও-প্রতিশ্রুতিবদ্ধ ফাইলগুলি অন্তর্ভুক্ত করতে চান:

git diff --name-only <starting SHA>

আরও সাধারণভাবে, নিম্নলিখিত সিনট্যাক্সটি সর্বদা আপনাকে বলবে যে দুটি ফাইলের মধ্যে কোন ফাইলগুলি পরিবর্তন হয়েছিল (তাদের এসএইচএ বা অন্যান্য নাম দ্বারা নির্দিষ্ট করা হয়েছে):

git diff --name-only <commit1> <commit2>

2
এবং যদি আপনি কোনও নির্দিষ্ট git diff --name-only <SHA> <SHA>^
কমিটের

3
--name-statusপরিবর্তে পতাকা ব্যবহার করা --name-onlyফাইলগুলির একটি তালিকা পেতে এবং তাদের সংশোধন স্থিতি, যেমন যুক্ত বা পরিবর্তিত হিসাবে দেখতে সুবিধাজনক।
থান প্লামার

@ অ্যাম্বারকে @ থান প্লামারের নোটগুলি উল্লেখ করা উচিত যা --name-statusতাদের কী হয়েছে তা দেখায়
জোল্টন সেল

64

আপনার শেষ প্রতিশ্রুতি থেকে সংশোধিত সমস্ত ফাইলের নাম সন্ধান করতে:

git diff --name-only

অথবা (কিছুচিহ্নবিহীন ফাইলগুলি সহ আরও কিছু তথ্যের জন্য):

git status

48
  • সমস্ত স্টেস্টেড না ট্র্যাক হওয়া পরিবর্তিত ফাইলের তালিকা করতে:

    git diff --name-only
    
  • সমস্ত পর্যায়ের ট্র্যাক হওয়া পরিবর্তিত ফাইলের তালিকা করতে:

    git diff --name-only --staged
    
  • সমস্ত পর্যায়বদ্ধ এবং স্টেস্ট না করা ট্র্যাক হওয়া পরিবর্তিত ফাইলগুলির তালিকা করতে:

    { git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
    
  • সমস্ত তালিকাবিহীন ফাইল তালিকাবদ্ধ করতে (তালিকাভুক্ত ফাইলগুলি git status, যাতে কোনও উপেক্ষা করা ফাইল অন্তর্ভুক্ত নয়):

    git ls-files --other --exclude-standard
    

যদি আপনি এটি শেল স্ক্রিপ্টে ব্যবহার করছেন, এবং আপনি প্রোগ্রামিকভাবে পরীক্ষা করতে চান যে এই আদেশগুলি কোনও কিছু ফেরত দিয়েছে কিনা, আপনি git diffএর --exit-codeবিকল্পটিতে আগ্রহী হবেন ।


16

যখন আমি অনেকগুলি ফাইল যুক্ত / সংশোধিত / মুছে ফেলেছি (শেষ প্রতিশ্রুতি থেকে), আমি কালক্রমে ক্রমে এই পরিবর্তনগুলি দেখতে চাই।

তার জন্য আমি ব্যবহার করি:

  • সমস্ত অ-পর্যায়িত ফাইলের তালিকা করতে:

    git ls-files --other --modified --exclude-standard
    
  • প্রতিটি ফাইলের জন্য সর্বশেষ পরিবর্তিত তারিখটি পেতে:

    while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done
    

যদিও রুভিম মন্তব্যগুলিতে পরামর্শ দেয় :

xargs -0 stat -c '%y %n' -- 
  • এগুলি প্রাচীনতম থেকে আরও সাম্প্রতিকতে বাছাই করতে:

    sort
    

একটি উপাধি ব্যবহার করা সহজ করে তোলে:

alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done|sort'

বা (খাটো এবং আরও দক্ষ, রুভিমকে ধন্যবাদ )

alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'

উদাহরণ স্বরূপ:

username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd

আমি এখন আমার পরিবর্তনগুলি পর্যালোচনা করতে পারি, প্রাচীন থেকে আরও সাম্প্রতিক to


কেন xargsএবং একক কল ব্যবহার করবেন না stat? সম্পূর্ণ ওয়ান-লাইনার:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
রুভিম

@ আরভিম আপনাকে ধন্যবাদ খুব ভাল পরামর্শ। আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্য অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি।
ভনসি

4

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

git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>

গিট ডিফ ডকুমেন্টেশন থেকে পৃথক পৃথক-ফিল্টার বিকল্পগুলি :

পরিবর্তন-Filter = [(একটি | সি | ডি | এম | আর | টি | ইউ | এক্স | বি) ... [*]]

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

এছাড়াও, এই বড় হাতের অক্ষরগুলি বাদ দেওয়া যায় না can উদাহরণস্বরূপ --ডিফ-ফিল্টার = বিজ্ঞাপন যোগ এবং মুছে ফেলা পথ বাদ দেয়।

আপনি যদি স্থিতিটিও তালিকাবদ্ধ করতে চান (যেমন এ / এম), পরিবর্তন করুন --name-only করুন --name-status


3

স্টেস্ট না করা পরিবর্তিত তালিকা ব্যবহার করে git statusএবং grepনীচের মত কমান্ড পাওয়া যাবে । এরকম কিছু git status -s | grep M:

root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
 M src/.../file1.js
 M src/.../file2.js
 M src/.../file3.js
 ....

নোট করুন যে এটি কেবল অচিহ্নবদ্ধ পরিবর্তনগুলির জন্যই ব্যবহার করা যেতে পারে, সুতরাং এটি 'দুটি গিট কমিটির মধ্যে পরিবর্তিত হওয়া ফাইলগুলির জন্য' দরকারী নয়
জন ভ্যান্ডেনবার্গ

2

সঙ্গে git showআপনি যদি অনুরূপ ফলাফলের পেতে পারেন। git logঅন্তর্ভুক্ত ফাইলগুলির তালিকা সহ প্রতিশ্রুতিবদ্ধ (যেমন এটি দেখার মতো) দেখার জন্য ব্যবহার করুন:

git show --name-only [commit-id_A]^..[commit-id_B]

[commit-id_A]প্রাথমিক প্রতিশ্রুতিবদ্ধটি কোথায় এবং [commit-id_B]আপনি প্রদর্শন করতে চেয়ে শেষ প্রতিশ্রুতিবদ্ধ।

^প্রতীক সহ বিশেষ মনোযোগ । যদি আপনি এটি না রাখেন তবে কমিট-আইডি_এ তথ্য মোতায়েন করা হবে না।


1

যদি আপনি পরিবর্তিত ফাইলগুলি পরীক্ষা করতে চান তবে আপনাকে অনেকগুলি ছোট ছোট জিনিসের যত্ন নেওয়া দরকার যেমন আপনি ব্যবহার করতে পারেন তবে যেমন আপনি যে ফাইলটি পরিবর্তন করেছেন তা পরীক্ষা করতে চান তবে টাইপ করুন

গিট স্ট্যাটাস - এটি পরিবর্তনগুলি সহ ফাইলগুলি দেখায়

তারপরে আপনি কী কী পরিবর্তন করতে হবে তা যদি জানতে চান তবে এটি বিভিন্নভাবে পরীক্ষা করা যেতে পারে,

গিট ডিফ - সমস্ত ফাইলের সমস্ত পরিবর্তন দেখাবে

কেবলমাত্র একটি ফাইল পরিবর্তিত হলেই এটি ভাল

এবং যদি আপনি নির্দিষ্ট ফাইলটি চেক করতে চান তবে ব্যবহার করুন

গিট বিভিন্ন

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