Hur man söker genom senaste Git Commit -ändringar

0
162

Spåra när och var kodrader har lagts till i din kodbas kan vara en huvudvärk, men Git lagrar alla ändringsloggar och har några verktyg för att söka igenom commit diffs. Du kan använda dem för att hitta rader som matchar en given söksträng.

Använda Git-logg

Tyvärr erbjuder webbplatser som GitHub inte den här funktionen, så du måste använda git -logg. Det här kommandot har många parametrar, inklusive att kunna söka igenom commit diffs, men hanteringen av output är lite otymplig.

I alla fall är Gits interaktiva personsökardisplay ganska klumpig för många människor, så vi rekommenderar att du antingen söker i kommandofältet med /Search, eller att pipetterar utmatningen direkt till konsolen med | cat, eller till en fil med & gt; log.txt, där det kan sökas mer effektivt.

Att köra den här typen av sökningar på ett helt förråd kommer förmodligen att generera mycket stor produktion. Du vill sannolikt se åtaganden inom ett givet tidsintervall, vilket du kan göra med -efter och -innan, som tar datum såväl som relativa datum som “ 2 veckor ” och “ 3 månader. ” Följande kommando ignorerar åtaganden som är äldre än en och en halv månad och ignorerar också mycket nya åtaganden.

git log –after = “6 week” –before = “1 week”

Om du bara vill veta vilka åtaganden som innehåller en given söksträng kan du använda -S, vilket kräver att du lägger söksträngen direkt efter den utan blanksteg.

git log –after = “6 week” – S'Dictionary '–stat

Annonsering

Om du &#8217 ; skulle vilja titta på filerna med denna utdata, du kan använda -p -flaggan:

git log –after = “6 week” -S'Dictionary '–stat -p | katt

Denna utdata är dock massiv för alla stora frågor och skiljer sig inte mycket från att bara öppna den i din IDE. För att lösa det måste vi använda grep och sed, vilket betyder att kommandon tyvärr kommer att bli komplicerade.

Använda sed For Smarter Matchning

För att matcha och skriva ut de faktiska raderna i filen måste du använda grep och leda utmatningen till den för att skriva ut raderna som mönstret hittades på. Detta kräver att du skriver mönstret två gånger:

git log –after = “6 veckor” -S'Dictionary '–stat -p | grep 'Dictionary'

Detta har dock ett problem — det inkluderar inte längre bindande meddelanden eller ID: n. För att åtgärda detta måste vi bryta ut sed:

SEARCH = Dictionary & amp; & amp; git log –after = “6 veckor” -S $ SÖK –stat -p | sed -n “/commit/,/diff/p;/$ SEARCH/p”

Detta kommando anger en SÖK -variabel, eftersom det är krångligt att skriva sökordet två gånger. Den kör git log –stat -p, som skriver ut hela utmatningen, men den överförs till sed för analys. sed matchar alla linjer mellan “ begå ” och “ diff, ” som tar tag i –stat header -utdata. Sedan lägger den till linjen som den matchade och producerar faktisk användbar utmatning.

Kanske använda Git Blame istället

Exemplen ovan fungerar väl för att söka igenom en hel kodbas. Men om du vet vilken fil som påverkas och istället bara vill förstå historiken för den kanske du vill använda git blame.

Annonsering

Git-blame kommer att skriva ut hela filen, men kommentera varje rad med den person som senast ändrade den. Detta låter dig snabbt spåra ändringar och i många fall lägga skulden på dina medarbetare.

Du kan använda kommandot git blame, men GitHub har ett bra GUI för det, tillgängligt genom att klicka på fil i fråga och trycker på “ Skyll. ”

Observera att du också kan se den kronologiska historien för filen från samma gränssnitt; Git blame kondenserar det hela till en enda utmatning.