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


1950

রেপোতে আমার একগুচ্ছ কমিট রয়েছে। আমি দুটি কমিটের মধ্যে পরিবর্তিত ফাইলগুলির একটি তালিকা দেখতে চাই - SHA1 থেকে SHA2 এ।

আমার কোন আদেশ ব্যবহার করা উচিত?


3
একটি কমিট জন্য এবং তার পিতা বা মাতা: stackoverflow.com/questions/424071/...
সিরো Santilli冠状病毒审查六四事件法轮功

উত্তর:


2661
git diff --name-only SHA1 SHA2

কমিটগুলি সনাক্ত করতে আপনাকে কেবলমাত্র SHA এর যথেষ্ট পরিমাণ অন্তর্ভুক্ত করতে হবে। উদাহরণস্বরূপ আপনিও করতে পারেন

git diff --name-only HEAD~10 HEAD~5

দশম সর্বশেষ প্রতিশ্রুতি এবং পঞ্চম সর্বশেষ (বা তাই) এর মধ্যে পার্থক্যগুলি দেখতে।


151
এটি গিট শোতেও কাজ করে। git show --name-only SHA1
আগস্ট Lilleaas

78
git diff --name-status [TAG|SHA1]ফাইলগুলিতেও কী অপারেশন করা হয়েছিল তা দেখায়
পুনরায় সংযোগ করুন

2
আপনি এটিও করতে পারেন: গিট ডিফারফ - কেবলমাত্র হেড @ {3} হেড @ {0 you আপনি যে তুলনা করতে চান তার জন্য কমিট।
b01

7
@ অগাস্টলিলাস আসলে শো ব্যবহার করে কেবলমাত্র 2 টি নির্দিষ্ট কমিট দেখায়, যদি আপনি 2 টির মধ্যে চুক্তি করেন তবে তাদের ছেড়ে দেওয়া হবে
ক্রিসান

4
নীচে উল্লিখিত হিসাবে, git diff --name-statusযুক্ত করা ফাইলগুলি দেখাতে চায় না বলে মনে হচ্ছে। @sschuberth নির্দিষ্ট git show, যা আমার জন্য সঠিকভাবে কাজ বলে মনে হচ্ছে না: git show --pretty=format: --name-status। কেবল করা git show --name-statusকিছুটা আরও তথ্য দেয়, তবে তবুও সুন্দর এবং ঘন ... এটি আমার নতুন
গোটো

416
git diff --name-status [SHA1 [SHA2]]

কেবল - নাম-এর মতো, আপনি যদি ফাইলের (সংশোধিত, মুছে ফেলা, যোগ করা ...) কী ঘটেছিল সে সম্পর্কে একটি সাধারণ উপসর্গ না পান

git log --name-status --oneline [SHA1..SHA2]

অনুরূপ, তবে কমিটগুলি প্রতিশ্রুতিবদ্ধ বার্তার পরে তালিকাভুক্ত করা হয়, যাতে আপনি কখন ফাইলটি পরিবর্তন করা হয়েছিল তা দেখতে পাবেন।

  • যদি আপনি ঠিক কি নির্দিষ্ট ফাইল ঘটেছে প্রতি আগ্রহ দেখিয়েছেন / ফোল্ডার সংযুক্ত করতে পারবেন -- <filename> [<filename>...]করার git logসংস্করণ।

  • যদি আপনি একক প্রতিশ্রুতিবদ্ধতার জন্য কী ঘটে তা দেখতে চান তবে এটিকে SHA1 কল করুন, তারপরে করুন
    git log --name-status --oneline [SHA1^..SHA1]

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


আমি গিট ডিফ - নাম-স্ট্যাটাস বলতে পারি এবং এটি 'যুক্ত ফাইল' দেয়।
আর্টিস্ট

1
গিট লগের জন্য, এসএএএএএলএসএএইচএ..এসএএচ 2 এর মতো এটির দুটি বিন্দু থাকা দরকার এবং দ্বিতীয় এসএইচএ optionচ্ছিক নয়, সুতরাং এটির মতো দেখতে হবে: গিট লগ - নাম-স্থিতি --অনলাইন [এসএএএ 1 .. SHA2]
টাসব্রিলিগ

নির্দিষ্ট ফাইল / নির্দিষ্ট ফাইলের ধরণ বাদ দেওয়ার কোনও উপায় আছে কি?
আগস্ট

3
--relative[=<path>]বিকল্প আপনাকে সাহায্য করতে পারি, আমি নিশ্চিত নই। অন্যথায় সবসময় | erep -v '(.tmp|.foo|.dontwant)$'...
artfulrobot

80

দেখে মনে হচ্ছে কেউ স্যুইচটির কথা উল্লেখ করেনি --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

এছাড়াও আছে --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

এবং --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

4
গৃহীত উত্তরটি সঠিক, তবে এটি অত্যন্ত দরকারী এবং আপনাকে কিছুটা অতিরিক্ত তথ্য দেয়। ধন্যবাদ!
কনটুর

2
এতে সম্মত হ'ল এটি আরও কার্যকর উত্তর কারণ এটিতে বিভিন্ন পরিসংখ্যান রয়েছে।
ইন্টারনেটস্রোস

52

তবে অন্য শাখার সাথে আপনার শাখা এবং এর সাধারণ পূর্বপুরুষের মধ্যে ফাইলগুলি পরিবর্তিত হয়েছে তা দেখার জন্য (উত্স / মাস্টার বলুন):

git diff --name-only `git merge-base origin/master HEAD`

1
এটি সত্যিই দরকারী ছিল! আমি আশা করি আমি সহজভাবে বলতে git diffstatus masterবা অনুরূপ বলতে পারি , যা উপরেরটিকে ট্রিগার করে।
ওমা

3
বা git show --pretty=format: --name-only origin/master..
স্কুবার্থ

আপনি এটিকে একটি গিফ ওরফে তৈরি করতে সক্ষম নাও হতে পারেন তবে আপনি এটি অবশ্যই আপনার .bashrc এ রাখতে পারেন।
ফ্রেড

3
বা এমনকি সহজ: git diff --name-only HEAD...master(তিনটি বিন্দু নোট করুন)। বিস্তারিত ব্যাখ্যার জন্য এখানে দেখুন
ostrokach

1
বেশিরভাগ সঠিক উত্তর বলে মনে হচ্ছে! সরল git diff --name-only master..branchগিথুব পিআর তালিকার সাথে মেলে না। এইভাবে আরও সুনির্দিষ্ট তবে যাইহোক আমার কাছে গিথাব পিআর-তে 171 বনাম 171 ফাইল রয়েছে। ( merge-baseআমার 228 বনাম 171 ছাড়াই )
x'ES

21

@ আর্টফুলবোটের উত্তর পরিপূরক করতে, আপনি যদি দুটি শাখার মধ্যে পরিবর্তিত ফাইলগুলি দেখাতে চান:

git diff --name-status mybranch..myotherbranch

অগ্রাধিকার সম্পর্কে সাবধান। আপনি যদি নতুন শাখাটি প্রথমে রাখেন তবে এতে ফাইলগুলি যুক্ত না করে মুছে ফেলা হবে।

একটি যুক্ত করা grepজিনিসগুলি আরও সংশোধন করতে পারে:

git diff --name-status mybranch..myotherbranch | grep "A\t"

এরপরে কেবল যুক্ত হওয়া ফাইলগুলি প্রদর্শিত হবে myotherbranch


4
Regexes দুর্দান্ত একটি সত্যিই প্রায় কিছু করতে পারে। তবে এক্ষেত্রে এমনও রয়েছে --diff-filterযা স্থানীয়ভাবে এই কার্যকারিতা দেয় যার অর্থ ভুল ফলাফলের কম সম্ভাবনা (যেমন মিথ্যা ধনাত্মক)
জ্যাস্পার

8

আপনার নীচে উপনাম যুক্ত করুন ~/.bash_profile, তারপরে চালান source ~/.bash_profile; এখন যে কোনও সময় showfilesআপনার গিট সংগ্রহস্থল থেকে শেষ প্রতিশ্রুতিবদ্ধভাবে চালিত হওয়া আপডেট হওয়া ফাইলগুলি দেখা দরকার ।

alias showfiles='git show --pretty="format:" --name-only'

2
বা git config --global alias.showfiles 'show --pretty="format:" --name-only'বানাতে git showfiles
সিজিবিএম


5

এছাড়াও মনে রাখবেন, আপনি যদি কেবল সর্বশেষ প্রতিশ্রুতি এবং তার আগেরটির মধ্যে পরিবর্তিত ফাইলগুলি দেখতে চান। এটি সূক্ষ্মভাবে কাজ করে:git show --name-only


3

গিট লগ ব্যবহার করুন - ব্যাখ্যাটি = অনলাইনলাইন> সি: \ ফাইলের নাম.লগ

যা কেবলমাত্র একটি অনলাইনলাইনে লগ করবে (- ব্যাখ্যাটি = অনলাইন) পরিবর্তিত ফাইলটির নাম দেয়। আপনার আউটপুট ফাইলে সমস্ত বিবরণ লগ করবে।


git log --pretty=onelineআমাকে দেয় শুধুমাত্র রয়েছে SHA এবং Git 2.10.1 ব্যবহার বার্তা কমিট
damd

3

যেমন Artfulrobot তার উত্তরে বলেছেন:

git diff --name-status [SHA1 [SHA2]]

আমার উদাহরণ:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png

3

যাকে কেবল জাভা ফাইলগুলিতে ফোকাস করা দরকার তার জন্য, এটি আমার সমাধান:

 git diff --name-status SHA1 SHA2 | grep '\.java$'

1

নিম্নলিখিতটি আমার পক্ষে ভাল কাজ করে:

$ git show --name-only --format=tformat: SHA1..SHA2

এটি একটি একক প্রতিশ্রুতি দিয়েও ব্যবহার করা যেতে পারে:

git show --name-only --format=tformat: SHA1

যা জেনকিনসে ব্যবহারের জন্য কার্যকর যেখানে আপনাকে চেঞ্জসেট এসএইচএ'র একটি তালিকা সরবরাহ করা হয়েছে এবং কোন ফাইলগুলি পরিবর্তন করা হয়েছে তা দেখতে তাদের পুনরাবৃত্তি করতে চান।

এই উপরে উত্তর একটি দম্পতি অনুরূপ, কিন্তু ব্যবহার tformat:বদলে format:করে মধ্যবর্তী বিভাজক ব্যবধান সরায়।


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