היסטוריה ו-log
אחרי שמתחילים לעבוד עם git, ההיסטוריה הולכת ומתעבה. הפקודות בקובץ הזה עוזרות לחקור את ההיסטוריה הזו: מה השתנה, מתי, על ידי מי ולמה.
git log - צפייה בהיסטוריה
git log # היסטוריה מלאה
git log --oneline # שורה אחת לכל commit
git log --graph # ייצוג גרפי של branches
git log --all # מכל ה-branches
git log -n 5 # 5 commits אחרונים
git log -p # עם ה-diff המלא של כל commit
git log --stat # סיכום שינויים (כמה שורות בכל קובץ)
הצירוף הפופולרי
git log --all --decorate --oneline --graph
נותן תצוגה יפה של כל ה-branches יחד. אפשר לקצר ל-git log --adog.
סינון לפי קריטריונים
git log --since="2 weeks" # לפי תאריך
git log --until="2025-01-01"
git log --author="Nafi" # לפי מחבר
git log --grep="login" # חיפוש בהודעות commit
git log file.js # היסטוריה של קובץ ספציפי
git log -p file.js # עם diff מלא לקובץ
git log -S "functionName" # חיפוש מתי שורה הוספה / נמחקה
git show - מידע על commit ספציפי
git show # ה-commit האחרון (HEAD)
git show HEAD # אותו דבר
git show HEAD~1 # commit אחד אחורה
git show HEAD~3 # 3 commits אחורה
git show a3f5c2d # לפי SHA חלקי
git show main # ה-commit שאליו main מצביע
הפלט מציג: - מי המחבר ומתי - הודעת ה-commit - ה-diff המלא של מה שהשתנה
git diff - השוואות
git diff # working directory מול staging
git diff --staged # staging מול ה-commit האחרון
git diff --cached # זהה ל---staged
git diff HEAD # working directory מול ה-commit האחרון
git diff main feature/login # השוואה בין branches
git diff a3f5c2d b8e7f1a # השוואה בין שני commits
git diff HEAD~3 HEAD # השוואה בין נקודות בהיסטוריה
git diff main -- file.js # השוואה של קובץ ספציפי בלבד
git blame - מי שינה כל שורה
git blame file.js
git blame -L 10,20 file.js # רק שורות 10-20
הפלט מציג ליד כל שורה את ה-SHA, המחבר והתאריך של ה-commit שהוסיף את השורה. שימושי כשרוצים להבין למה קוד מסוים נכתב.
git grep - חיפוש בקבצי המאגר
git grep "TODO" # חיפוש בכל הקבצים tracked
git grep -n "TODO" # עם מספרי שורה
git grep "useState" -- "*.jsx" # רק בקבצי jsx
git grep "useState" HEAD~3 # חיפוש בנקודה היסטורית
reflog - ההצלה האחרונה
git reflog
reflog מציג את כל הפעולות שעשיתם ב-HEAD - גם פעולות שהיו "destructive" (כמו git reset --hard). אם בטעות מחקתם commits, אתם כמעט תמיד יכולים לשחזר אותם דרך reflog:
git reflog
# ...
# a3f5c2d HEAD@{2}: commit: Add important feature
# ...
git reset --hard a3f5c2d
דוגמאות מעשיות
"מי הוסיף את השורה הזו ולמה?"
git blame -L 50,55 src/auth.js
# מוצאים SHA, ואז:
git show a3f5c2d
"איפה ההודעה 'fix login' הופיעה?"
git log --grep="fix login" --oneline
"מה השתנה השבוע?"
git log --since="1 week ago" --oneline --author="Nafi"
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה מציג
git log --oneline?הצגת התשובה
תשובה ב. hash מקוצר והודעה.
-
איך מוצאים commit שאבד אחרי reset?
הצגת התשובה
תשובה ב. reflog הוא רשת הביטחון המקומית.