வழிகாட்டி

git log, diff, show и blame: Git-இல் திட்ட வரலாற்றை எப்படிப் படிப்பது

புதுப்பிக்கப்பட்டது: · Skillaria.Top

git log commit-களின் பட்டியலைக் காட்டி ஆசிரியர், தேதி, கோப்பு மற்றும் உரை வழியாக வடிகட்டும்; git diff வேலை அடைவு, index மற்றும் எந்தக் commit-களையும் ஒப்பிடும்; git show ஒரு commit-ஐ முழுமையாகக் காட்டும்; git blame ஒவ்வொரு வரியையும் கடைசியாக மாற்றிய commit-ஐக் காட்டும்.

நான்கு கட்டளைகள் திட்ட வரலாறு பற்றிய பெரும்பாலான கேள்விகளுக்குப் பதில் சொல்லும். git log «என்ன நடந்தது» என்று சொல்லும், git diff «சரியாக என்ன மாறியது» என்று, git show «ஒரு குறிப்பிட்ட commit-க்குள் என்ன உள்ளது» என்று, git blame «இந்த வரியை யார், எப்போது எழுதினார்» என்று. அன்றாட வளர்ச்சியில் உண்மையாகப் பயன்படும் கொடிகளுடன் ஒவ்வொன்றின் வேலை முறைகள் கீழே.

git log: commit-களின் பட்டியல்

வாதங்கள் இல்லாமல் git log நடப்புக் கிளையின் commit-களை புதியவற்றிலிருந்து பழையவற்றுக்கு முழு SHA-1 hash, ஆசிரியர், தேதி மற்றும் செய்தியுடன் காட்டும். பக்கங்களாகத் திறக்கும் (பொதுவாக less): இடைவெளி — அடுத்த பக்கம், /உரை — தேடல், q — வெளியேறு.

commit 7be41d0c9a2e4f1b8d6c3e5a7f9b0c2d4e6f8a1b
Author: Anna Petrova <anna@example.com>
Date:   Mon Oct 5 14:22:10 2026 +0300

    feat: кэширование ответов API

Hash-ஐ முழுவதுமாக நகலெடுக்க வேண்டியதில்லை: Git 4 எழுத்துகளிலிருந்து தொடங்கும் எந்த தனித்த முன்னொட்டையும் ஏற்கும்; நடைமுறையில் 7 போதும்.

சுருக்கமான வெளியீடு: --oneline

git log --oneline -10
# 7be41d0 (HEAD -> main, origin/main) feat: кэширование ответов API
# 1c02e8f fix: таймаут запросов
# 9a4b3c2 refactor: вынес клиент в модуль

-10 (அல்லது -n 10) commit எண்ணிக்கையை வரம்பிடும். அடைப்புக்குறிக்குள் சுட்டிகள் உள்ளன: HEAD எங்கே, உள்ளூர் மற்றும் தொலைநிலைக் கிளைகள், tag-கள்.

கிளை வரைபடம்: git log --graph

«git graph» என்ற தேடல் பொதுவாக இதையே குறிக்கிறது: டெர்மினலிலேயே கிளைப் பிரிவுகளையும் இணைப்புகளையும் வரைதல்.

git log --oneline --graph --all
# * 3e1f0aa (feature/auth) feat: вход по токену
# | * 7be41d0 (HEAD -> main) feat: кэширование ответов API
# |/
# * 1c02e8f fix: таймаут запросов
# *   5d2c7b1 Merge branch 'feature/search'
# |\
# | * 8f3a9e0 feat: поиск
# |/
# * 9a4b3c2 refactor: вынес клиент в модуль

--all நடப்புக் கிளையை மட்டுமல்ல, எல்லாக் கிளைகளையும் காட்டும். Alias ஒன்று வைத்துக்கொள்வது வசதி: git config --global alias.lg "log --oneline --graph --all --decorate"; பின்னர் git lg போதும்.

உங்கள் சொந்த வடிவம்: --pretty=format

git log --pretty=format:"%h %ad %an %s" --date=short
# 7be41d0 2026-10-05 Anna Petrova feat: кэширование ответов API

முக்கிய குறியீடுகள்: %h — குறுகிய hash, %H — முழு hash, %an — ஆசிரியர், %ae — அவரின் மின்னஞ்சல், %ad — ஆசிரியர் தேதி, %ar — உறவினர் தேதி («2 days ago»), %s — செய்தியின் தலைப்பு.

git log-இல் வரலாற்றை வடிகட்டுவது

ஆசிரியர் மற்றும் தேதியின்படி

git log --author="Anna"
git log --since="2 weeks ago" --until="2026-10-01"
git log --since=yesterday --oneline

--author ஒரு வழக்கமான வெளிப்பாட்டை ஏற்கும்; பெயர் மற்றும் மின்னஞ்சலில் தேடும். Git தேதிகளை இயல்பான வடிவத்திலும் ISO வடிவத்திலும் புரிந்துகொள்ளும்.

செய்தியின் உரையின்படி

git log --grep="fix" -i --oneline

-i தேடலை பெரிய/சிறிய எழுத்து வேறுபாடின்றி ஆக்கும். உங்கள் குழு செய்திகளில் பணி எண்களை எழுதினால், ஒரு பணியின் எல்லா commit-களையும் விரைவாகக் கண்டறியலாம்.

கோப்பு அல்லது கோப்புறையின்படி

git log --oneline -- src/api/client.py
git log --follow -p -- src/api/client.py

இரட்டை கோடு பாதைகளையும் கிளைகளையும் பிரிக்கிறது. --follow பெயர் மாற்றங்கள் வழியாக கோப்பின் வரலாற்றைத் தொடரும் (ஒரே கோப்புக்கு வேலை செய்யும்), -p ஒவ்வொரு commit-இன் patch-ஐயும் காட்டும்.

மாற்றப்பட்ட குறியீட்டின்படி: «விசையைத்» தேடுவது

git log -S "retry_count" --oneline     # коммиты, где менялось число вхождений строки
git log -G "timeout\s*=" --oneline    # коммиты, где в diff есть строки по regex

-S ஒரு செயல்பாடு அல்லது மாறி சேர்க்கப்பட்ட அல்லது நீக்கப்பட்ட commit-ஐக் கண்டறியும் — ஒரு குறியீட்டுத் துண்டு எங்கே போனது என்று புரிந்துகொள்ள இது இன்றியமையாதது.

commit வரம்புகள்

git log main..feature      # что есть в feature, но нет в main
git log origin/main..HEAD  # мои локальные коммиты, ещё не отправленные
git log --no-merges        # без merge-коммитов
git log --stat             # какие файлы и сколько строк изменено

git diff: என்ன மாறியது என்று பார்ப்பது

git diff பற்றி முதலில் புரிந்துகொள்ள வேண்டியது: அது எந்த இரண்டு நிலைகளை ஒப்பிடுகிறது. இங்கேதான் «நான் எல்லாவற்றையும் மாற்றினேனே, diff ஏன் காலியாக உள்ளது» என்ற கேள்வி எழுகிறது.

கட்டளைஎதை ஒப்பிடுகிறது
git diffவேலை அடைவு எதிராக index (தயாராகாத மாற்றங்கள்)
git diff --staged (--cached)index எதிராக கடைசி commit (commit-இல் என்ன போகும்)
git diff HEADவேலை அடைவு எதிராக கடைசி commit (எல்லாம் சேர்த்து)
git diff A Bஇரண்டு commit-கள், கிளைகள் அல்லது tag-கள்
git diff A...BA-இலிருந்து பிரிந்த பின் B-இல் நடந்த மாற்றங்கள்

நீங்கள் git add செய்திருந்தால், சாதாரண git diff காலியாகிவிடும் — மாற்றங்கள் ஏற்கனவே index-இல் உள்ளன, --staged பாருங்கள். ஒருபோதும் சேர்க்கப்படாத புதிய கோப்புகளை diff காட்டாது.

git diff வெளியீட்டைப் படிப்பது

diff --git a/config.py b/config.py
index 3b18e51..a1c4f02 100644
--- a/config.py
+++ b/config.py
@@ -10,7 +10,7 @@ DEFAULTS = {
     "host": "localhost",
-    "timeout": 5,
+    "timeout": 30,
     "retries": 3,

- கொண்ட வரிகள் நீக்கப்பட்டவை, + கொண்டவை சேர்க்கப்பட்டவை, மற்றவை சுற்றுச்சூழல். @@ -10,7 +10,7 @@ தலைப்பு: இந்தத் துண்டு 10-ஆம் வரியில் தொடங்கி பழைய மற்றும் புதிய பதிப்புகளில் 7 வரிகள் நீளம்.

git diff-இன் பயனுள்ள கொடிகள்

git diff --stat main feature      # сводка по файлам
git diff --name-only HEAD~3       # только имена изменённых файлов
git diff --word-diff               # изменения по словам, удобно для текстов
git diff -w                        # игнорировать изменения пробелов
git diff main feature -- src/      # ограничить папкой

ஒவ்வொரு commit-க்கு முன்பும் git diff --staged பார்ப்பது நல்லது: மறைந்திருக்கும் பிழைத்திருத்த print அல்லது தற்செயலாகச் சேர்ந்த கோப்பைக் கண்டறிய இது கடைசி வாய்ப்பு.

git show: ஒரு commit முழுவதும்

git show commit-இன் தரவையும், அதன் பெற்றோருடனான diff-ஐயும் காட்டும். வாதம் இல்லையென்றால் கடைசி commit.

git show 7be41d0
git show HEAD~2 --stat           # без патча, только сводка
git show v1.2.0                  # тег: аннотация и коммит
git show main:src/config.py      # файл в том виде, как он был в коммите

கடைசி வடிவம் <திருத்தம்>:<பாதை> குறிப்பாகப் பயனுள்ளது: கிளையை மாற்றாமல் கோப்பின் பழைய பதிப்பைப் பார்க்கலாம். வெளியீட்டை ஒரு கோப்பிற்கு திருப்பிவிட்டால், checkout இல்லாமலேயே நீக்கப்பட்ட உள்ளடக்கத்தை மீட்டெடுக்கலாம்.

git blame: இந்த வரியை யார் மாற்றியது

git blame கோப்பு ஒவ்வொரு வரிக்கும் அதை கடைசியாக மாற்றிய commit, ஆசிரியர் மற்றும் தேதியைக் காட்டும். பெயர் குற்றம் சாட்டுவது போல ஒலித்தாலும், உண்மையில் இது சூழலைக் கண்டறியும் கருவி: commit-ஐக் கண்டுபிடித்து அதன் செய்தியைப் படித்து ஏன் அப்படிச் செய்யப்பட்டது என்று புரிந்துகொள்வது.

git blame -L 40,60 src/api/client.py
# 1c02e8f3 (Anna Petrova 2026-09-28 11:04:51 +0300 41)     timeout = settings.timeout
# 9a4b3c2e (Ivan Smirnov 2026-09-14 18:30:02 +0300 42)     session = build_session()
  • -L 40,60 — வரிகளின் வரம்பு மட்டும்; -L :செயல்பாட்டின்_பெயர் என்றும் கொடுக்கலாம்.
  • -w — இடைவெளி மாற்றங்களைப் புறக்கணித்து, வடிவமைப்பு commit-களில் சிக்காமல் இருக்க.
  • -C — வேறு கோப்புகளிலிருந்து நகர்த்தப்பட்ட வரிகளைக் கண்காணிக்க.
  • --ignore-rev <hash> அல்லது .git-blame-ignore-revs கோப்பு — தானியங்கி வடிவமைப்பு போன்ற பெருமளவு commit-களைத் தவிர்க்க.

வழக்கமான விசாரணை: git blame commit-ஐக் கண்டறியும், git show அதை முழுவதும் காட்டும், கோப்பின் git log அருகிலுள்ள மாற்றங்களைத் தரும்.

கடந்த காலத்தில் பயணம்: HEAD~ மற்றும் HEAD^

Commit-களை hash-களால் மட்டுமல்ல குறிப்பிடலாம். HEAD~1 — நடப்பு commit-இன் பெற்றோர், HEAD~3 — மூதாதையர். HEAD^2 — இணைப்பு commit-இன் இரண்டாவது பெற்றோர். கிளை, tag, தொலைநிலைக் கிளைப் பெயர்களும் வேலை செய்யும்: origin/main~2. பழைய commit-இல் முழு திட்டத்தையும் பார்க்க git switch --detach <hash>; திரும்ப git switch -.

நல்ல வரலாறு மற்றும் மோசமான வரலாறு

இந்தக் கட்டளைகள் வரலாறு அர்த்தமுள்ளதாக இருந்தால் மட்டுமே பயனுள்ளவை. «fix», «wip», «ещё правки» போன்ற செய்திகள் git log --grep மற்றும் git blame ஆகியவற்றைப் பயனற்றதாக்கும். நல்ல commit — ஒரு தர்க்கரீதியான மாற்றம், என்ன மற்றும் ஏன் என்று விளக்கும் தலைப்பு: fix: API நேர வரம்பை 30 வினாடிகளாக உயர்த்தியது — மெதுவான நுழைவாயில் காரணமாக. ஆறு மாதங்கள் கழித்து blame இப்படிப்பட்ட commit-ஐத்தான் கண்டுபிடித்து உங்களுக்கு ஒரு மணி நேரம் மிச்சப்படுத்தும்.

நடைமுறை: வரலாற்றின் மூலம் பிழையை விசாரிப்பது

ஒரு வெளியீட்டுக்குப் பின் API கோரிக்கைகள் நேர வரம்பால் தோல்வியடைகின்றன என்று வைத்துக்கொள்ளுங்கள். கட்டளைகளின் தொடர் சில நிமிடங்களில் காரணத்தை எப்படிக் கண்டறிகிறது என்று பாருங்கள்.

  1. வெளியீட்டில் என்ன சேர்ந்தது என்று பார்க்க: git log v1.4.0..v1.5.0 --oneline. பட்டியல் சிறியது, ஆனால் தலைப்புகளை வைத்து குற்றவாளி தெளிவாகத் தெரியாது.
  2. கோப்பின் அடிப்படையில் சுருக்க: git log v1.4.0..v1.5.0 --oneline -- src/api/. இரண்டு commit-கள் மட்டும் மிஞ்சும்.
  3. குறியீட்டில் தேட: git log -S "timeout" --oneline -- src/api/ நேர வரம்பின் மதிப்பு மாறிய commit-ஐக் கண்டுபிடிக்கும்.
  4. அதை முழுவதும் பார்க்க: git show 1c02e8f. Diff-இல் நேர வரம்பு 30-இலிருந்து 5 வினாடிகளுக்கு குறைக்கப்பட்டது தெரியும், செய்தியில் «UI-இன் பதிலை வேகப்படுத்த» என்ற விளக்கமும் இருக்கும்.
  5. இந்த வரியை வேறு யார் தொட்டார்கள் என்று பார்க்க: git blame -L :build_session src/api/client.py.

அதன் பின் தீர்வு பொறியியல் முடிவு: மதிப்பை மீட்டெடுப்பது, நேர வரம்பை அமைப்புகளுக்கு நகர்த்துவது, அல்லது git revert மூலம் commit-ஐ ரத்து செய்வது. Commit-கள் நூற்றுக்கணக்கில் இருந்து குற்றவாளியைக் கண்ணால் கண்டுபிடிக்க முடியாவிட்டால், git bisect உதவும் — வரலாற்றின் இருமநிலைத் தேடல், சில படிகளில் நடத்தையை உடைத்த commit-ஐச் சுட்டிக்காட்டும்.

எளிமையாக்கும் அமைப்புகள்

git config --global log.date iso            # формат дат в log
git config --global diff.colorMoved zebra   # подсветка перемещённых строк в diff
git config --global core.pager "less -FRX"  # не открывать пейджер для короткого вывода

வெளியீட்டை ஸ்கிரிப்ட் மூலம் செயலாக்க வேண்டுமென்றால் நிறங்களையும் பக்க வெளியீட்டையும் அணைக்கவும்: git --no-pager log --format="%H %s" --no-color. இயந்திரச் செயலாக்கத்திற்கு முழு hash %H பயன்படுத்துங்கள்: பெரிய களஞ்சியத்தில் குறுகிய முன்னொட்டுகள் காலப்போக்கில் தெளிவற்றதாகலாம்.

சுருக்கம்

--oneline, --graph, --author, -S மற்றும் பாதைகளுடன் கூடிய git log «என்ன நடந்தது» என்று சொல்கிறது. git diff வேலை அடைவு, index மற்றும் commit-களை ஒப்பிடுகிறது — அது இயல்பாக எதை ஒப்பிடுகிறது என்பதை நினைவில் வைத்திருங்கள். git show ஒரு commit-ஐ அல்லது பழைய கோப்புப் பதிப்பைக் காட்டும், git blame குறியீட்டின் ஒரு வரியிலிருந்து அதை உருவாக்கிய முடிவுக்குச் செல்ல உதவும். வரலாற்றைப் படிப்பதும் commit-களுக்கிடையே பயணிப்பதும் Git பாடநெறியில் நடைமுறையில் விளக்கப்பட்டுள்ளன.

அடிக்கடி கேட்கப்படும் கேள்விகள்

git log-இலிருந்து எப்படி வெளியேறுவது?

<code>q</code> அழுத்துங்கள் — வெளியீடு less பக்கப் பார்வையில் திறந்துள்ளது; பக்கப் பார்வை இல்லாமல் அச்சிட <code>git --no-pager log</code> அல்லது சிறிய எண்ணுடன் <code>-n</code> கொடியைப் பயன்படுத்துங்கள்.

நீக்கப்பட்ட கோப்பின் வரலாற்றை எப்படிப் பார்ப்பது?

<code>git log --oneline -- பாதை/கோப்பு</code> (இரட்டை கோட்டுடன்) இயக்குங்கள்; நீக்குவதற்கு முன் உள்ளடக்கம் <code>git show &lt;hash&gt;^:பாதை/கோப்பு</code>.

உள்ளூர் கிளையை தொலைநிலைக் கிளையுடன் எப்படி ஒப்பிடுவது?

முதலில் <code>git fetch</code>, பின்னர் <code>git diff origin/main</code> அல்லது <code>git log origin/main..HEAD</code> — அனுப்பப்படாத உங்கள் commit-களைப் பார்க்க.

வரைகலை வரலாற்றுப் பார்வை உள்ளதா?

ஆம், Git உடன் <code>gitk</code> வருகிறது; வரலாற்று வரைபடம் VS Code, JetBrains IDE-கள் மற்றும் GitHub, GitLab இணைய இடைமுகங்களிலும் உள்ளது.

git diff எதுவும் காட்டாதது ஏன்?

பெரும்பாலும் மாற்றங்கள் <code>git add</code> மூலம் index-இல் ஏற்கனவே உள்ளன — <code>git diff --staged</code> பாருங்கள்; கண்காணிக்கப்படாத புதிய கோப்புகளை <code>git diff</code> காட்டாது.

இந்தத் தலைப்பை வீடியோவில் கற்றுக்கொள்ளுங்கள்

“கிட்: ஆரம்பம் முதல் நம்பிக்கையான டெவலப்பர் வரை” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்