কীভাবে গিট লগ শো ফাইলের নামগুলি এসএনএন লগ-ভি এর মতো থাকতে পারে


987

এসভিএন-এর লগটিতে "-v" মোড রয়েছে যা প্রতিটি প্রতিশ্রুতিতে পরিবর্তিত ফাইলের ফাইলের নামগুলিকে আউটপুট দেয়:

jes5199 $ svn লগ -v
-------------------------------------------------- ----------------------
r1 | jes5199 | 2007-01-03 14:39:41 -0800 (বুধ, 03 জানু 2007) | 1 লাইন
পরিবর্তিত পথ:
   এ / লেখক
   ক / কপি
   এ / চেঞ্জলগ
   A / EOLOLION
   এ / ইনস্টল করুন
   এ / ম্যাকোএসএক্স

গিটের প্রতিটি প্রতিশ্রুতিতে পরিবর্তিত ফাইলগুলির একটি তালিকা পাওয়ার কী দ্রুত উপায় আছে?


15
আশ্চর্য কেন এতগুলি প্রত্যাশা / চানের মতো স্যুইচটি git logসমর্থন করে না -v? </
ripe

উত্তর:


1528

পরিবর্তিত ফাইলগুলির পুরো পাথ নামের জন্য:

git log --name-only

পূর্ণ পথের নাম এবং পরিবর্তিত ফাইলগুলির স্থিতির জন্য:

git log --name-status

সংক্ষিপ্তপথের নাম এবং পরিবর্তিত ফাইলগুলির একটি পৃথকীকরণের জন্য:

git log --stat

আরও অনেক অপশন রয়েছে, ডকগুলি পরীক্ষা করে দেখুন


17
আমি ব্যবহার git log --numstat। দেখুন git help logআরো বিকল্পের জন্য।
ma11 she28

29
git log --name-only --onelineপ্রতিশ্রুতিবদ্ধতার জন্য একটি রঙিন লাইন এবং প্রতি লাইনে একটি ফাইল stackoverflow.com/a/14227496/1995714
cp.engr

4
2.7.3 গিটের সাহায্যে, আমাকে git log --name-status --find-renames+ + মোছার পরিবর্তে নাম পরিবর্তন করা ফাইলগুলি দেখানোর জন্য এটি ব্যবহার করতে হয়েছিল।
সুজান ডুপোরন

1
নোট করুন যে --statদীর্ঘ পথগুলি সংক্ষেপ করে; প্রস্থটি কনফিগারযোগ্য তবে মোড়ানো হিস্টোগ্রামগুলি পড়া শক্ত। অন্যান্য ফর্ম্যাট যেমন --numstatসর্বদা পুরো পথ মুদ্রণ করে।
বেনি চেরনিয়াভস্কি-পাসকিন

@ ma11hew28 ধন্যবাদ --numstatগিটার 2.22.00 হিসাবে সেই লোক পৃষ্ঠাটির 946 লাইনে রয়েছে। এটি বেশিরভাগ মানুষের প্রয়োজনের চেয়ে অনেক বেশি বিকল্প options
মনিকা পুনরায় ইনস্টল করুন - এম শ্রাইডার

139

দ্রষ্টব্য: অবহিত করা হয়েছে, পরিবর্তে ব্যবহার করুন git whatchangedgit log

পরিবর্তে নতুন ব্যবহারকারীদের গিট-লগ [1] ব্যবহার করতে উত্সাহ দেওয়া হচ্ছে । whatchangedকমান্ড মূলত হিসাবে একই Git-লগ [1] কাঁচা বিন্যাস পরিবর্তন আউটপুট দেখানোর জন্য এবং মার্জ এড়িয়ে যেতে কিন্তু অক্ষমতা।

কমান্ডটি মূলত historicalতিহাসিক কারণে রাখা হয়; git logলিনাক্স কার্নেল মেইলিং লিস্ট পড়ে অনেক আগে যারা গিট শিখেছিলেন তাদের আঙ্গুলগুলি এটি টাইপ করার প্রশিক্ষণ দেওয়া হয়।


git whatchanged --statপ্রতিটি কমিটের পরিবর্তিত ফাইলের তালিকা পেতে (কমিট বার্তার পাশাপাশি) আপনি কমান্ডটি ব্যবহার করতে পারেন ।

তথ্যসূত্র


50

git show এছাড়াও একটি মহান আদেশ।

এটি svn diffএকধরণের মত তবে আপনি এটি একটি প্রতিশ্রুতিবদ্ধ নির্দেশিকাটি পাস করতে পারেন এবং এটির ভিন্নতা দেখতে পারেন।


46

আপনি যদি বাকী প্রতিশ্রুতি বার্তা ব্যতীত কেবল ফাইলের নাম পেতে চান তবে আপনি ব্যবহার করতে পারেন:

git log --name-only --pretty=format: <branch name>

এরপরে ফাইলের নাম সম্বলিত বিভিন্ন বিকল্প ব্যবহার করতে এটি বাড়ানো যেতে পারে:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

এই পদ্ধতিটি ব্যবহার করার সময় একটি বিষয় লক্ষ্যণীয় হ'ল আউটপুটটিতে কিছু ফাঁকা লাইন রয়েছে যা এড়িয়ে যেতে হবে। আপনি যদি স্থানীয় শাখায় পরিবর্তন করা ফাইলগুলি দেখতে চান তবে এটি এখনও কোনও দূরবর্তী শাখায় ঠেলাঠেলি করা হয় না এবং এটির কোনও গ্যারান্টি নেই যে রিমোট থেকে সর্বশেষতমটি ইতিমধ্যে টেনে নেওয়া হয়েছে example উদাহরণস্বরূপ :

git log --name-only --pretty=format: my_local_branch --not origin/master

স্থানীয় শাখায় পরিবর্তিত সমস্ত ফাইলগুলি দেখানো হবে তবে তারা এখনও রিমোটের মাস্টার শাখায় একীভূত হয়নি।


1
উপরের উদাহরণগুলিতে শ্বেত স্পেসে নোট করুন - এটির মতো git log --stat --pretty="format:" $branchName,। উদাহরণস্বরূপ git log --stat --pretty="format:" $(git rev-parse --abbrev-ref HEAD),। আমি যখন সেখানে আছি, এখানে আমার সঠিক উদ্দেশ্যে প্রাসঙ্গিক git log --name-only --pretty="format: " master..$(git rev-parse --abbrev-ref HEAD)
ক্ষতটি হ'ল

41

পরিবর্তিত ফাইলগুলির সাথে ইতিহাস দেখানোর জন্য আমি এটি দৈনিক ভিত্তিতে ব্যবহার করি:

git log --stat --pretty=short --graph

এটি সংক্ষিপ্ত রাখার জন্য, এটি করে একটি উপনাম যুক্ত করুন .gitconfig:

git config --global alias.ls 'log --stat --pretty=short --graph'

খনি এর খুব কাছাকাছি, গিট লগ - ব্যাখ্যাটি = অনলাইন - অনুচ্ছেদ - নাম-স্থিতি। আমি এটি আরও সংক্ষিপ্ত বলে মনে করি, কেবল পরিবর্তিত ফাইলগুলির তালিকা দেখানো হচ্ছে।
পিটার সুওয়ারা

15

আমি এটি ব্যবহার:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

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

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...

7

git diff --stat HEAD^!সর্বশেষ কমিট ( HEAD) এর জন্য পরিবর্তিত ফাইল এবং যুক্ত / সরানো রেখা গণনা দেখায় ।

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

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

ডাকা যেমন। ./changed_files 99থেকে একটি সংক্ষিপ্ত আকারে পরিবর্তন পেতে HEADকরতে HEAD~99। পাইপ করা যেতে পারে যেমন। to less


আপনি git diff --stat HEAD..masterশিরোনাম এবং মাস্টার মধ্যে পার্থক্য দেখাতে পারবেন না , বা আপনি যখন 2012 সালে আপনার উত্তরটি পোস্ট করেছিলেন তখন এটি উপস্থিত ছিল না?
ফেরিবিগ

1
@ ফেরিবিগ ওপি-র প্রশ্নটি কীভাবে "প্রতিটি প্রতিশ্রুতিতে পরিবর্তিত ফাইলের তালিকা পেতে" , এবং এর মধ্যে পার্থক্য সম্পর্কে নয় । যারা দুটি ভিন্ন জিনিস। HEADmaster
এনআরজে

4

সংক্ষিপ্ত বিন্যাসে প্রতি ফাইল প্রতিশ্রুতিবদ্ধ ফাইলগুলি তালিকাভুক্ত করার জন্য আমি নিম্নলিখিতটি প্রদর্শন করি find

git log --pretty=oneline --graph --name-status

3

উদাহরণস্বরূপ আউটপুট সহ উত্তরের সংক্ষিপ্তসার

এটি পাঁচটি সাধারণ কমিটের সাহায্যে স্থানীয় সংগ্রহস্থল ব্যবহার করছে।

‣ git log --name-only
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

file2
file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

file1
file2
file3


‣ git log --name-status
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

R100    file4   file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

M       file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

M       file2
D       file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

A       file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

A       file1
A       file2
A       file3


‣ git log --stat
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

 file1 | 3 +++
 1 file changed, 3 insertions(+)

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

 file2 | 1 +
 file3 | 0
 2 files changed, 1 insertion(+)

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

 file4 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

 file1 | 0
 file2 | 0
 file3 | 0
 3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --oneline
ed080bc (HEAD -> master) mv file4 to file5
file5
5c4e8cf foo file1
file1
1b64134 foobar file2, rm file3
file2
file3
e0dd02c Add file4
file4
b58e856 Added files
file1
file2
file3


‣ git log --pretty=oneline --graph --name-status
* ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master) mv file4 to file5
| R100  file4   file5
* 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328 foo file1
| M     file1
* 1b6413400b5a6a96d062a7c13109e6325e081c85 foobar file2, rm file3
| M     file2
| D     file3
* e0dd02ce23977c782987a206236da5ab784543cc Add file4
| A     file4
* b58e85692f711d402bae4ca606d3d2262bb76cf1 Added files
  A     file1
  A     file2
  A     file3


‣ git diff-tree HEAD
ed080bc88b7bf0c5125e093a26549f3755f7ae74
:100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D  file4
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A  file5


‣ git log --stat --pretty=short --graph
* commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
| Author: My Name <user@email.com>
| 
|     mv file4 to file5
| 
|  file4 => file5 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
| Author: My Name <user@email.com>
| 
|     foo file1
| 
|  file1 | 3 +++
|  1 file changed, 3 insertions(+)
| 
* commit 1b6413400b5a6a96d062a7c13109e6325e081c85
| Author: My Name <user@email.com>
| 
|     foobar file2, rm file3
| 
|  file2 | 1 +
|  file3 | 0
|  2 files changed, 1 insertion(+)
| 
* commit e0dd02ce23977c782987a206236da5ab784543cc
| Author: My Name <user@email.com>
| 
|     Add file4
| 
|  file4 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit b58e85692f711d402bae4ca606d3d2262bb76cf1
  Author: My Name <user@email.com>

      Added files

   file1 | 0
   file2 | 0
   file3 | 0
   3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --pretty=format:
file5

file1

file2
file3

file4

file1
file2
file3


‣ git log --name-status --pretty=format:
R100    file4   file5

M       file1

M       file2
D       file3

A       file4

A       file1
A       file2
A       file3


‣ git diff --stat 'HEAD^!'
 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)


‣ git show
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

diff --git a/file4 b/file5
similarity index 100%
rename from file4
rename to file5


@ সিবি-বেইলি @ পিটার-সুওয়ারা @ গৌরব @ ওমর-দাগান @ এক্সসোর @ হ্যাজোক @ এনআরজেড @ পিটিসি এর ক্রেডিট


0

আরেকটি দরকারী কমান্ড হবে git diff-tree <hash>যেখানে হ্যাশ একটি হ্যাশ পরিসরও হতে পারে ( <old>..<new>স্বরলিপি দ্বারা চিহ্নিত )। একটি আউটপুট উদাহরণ:

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

ক্ষেত্রগুলি হ'ল:

উত্স মোড, গন্তব্য মোড, উত্স হ্যাশ, ডেস্ট হ্যাশ, স্থিতি, ফাইলের নাম

স্ট্যাটাসগুলি এমনটি যা আপনি আশা করবেন: ডি (মুছে ফেলা), (যুক্ত), এম (সংশোধিত) ইত্যাদি সম্পূর্ণ বিবরণের জন্য ম্যান পৃষ্ঠাটি দেখুন।


0

লগগুলি পেতে আমি সাধারণত এটি ব্যবহার করি:

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"

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