git log -n 1 --pretty=format:%H -- my/file.php
Today I had the mammoth task of checking through 512 git commits to find a piece of code that broke something.
Usually i would git log, look back however many commits, and then do a git reset –hard COMMIT_NUMBER, then check if it worked. If it did, I would git pull back to the HEAD again, and try a resetting back to a more recent commit, until I found the bad code.
Never again! Git bisect to the rescue!
Find any good commit in the past, and note the commit number. Find any bad commit where the code is broken, and note the commit number.
Now, do the following:
git bisect start git bisect good 514d83c git bisect bad b27f38e
Git checks out the middle commit between the good and bad ones. At this point I reloaded my page to see if the code was working or not. The code was working, so I then told git that it was good:
git bisect good
Again the code was working, so as you can see I ran it again. Each time, git bisect jumps half way, iterating and narrowing down the options. Keep doing this and checking your code until it breaks, then say:
git bisect bad
Here’s the rest of the output:
Now we have the exact commit number, and can do a git diff to find out what you did wrong! 🙂
Once you have the commit in question, tell git bisect that you are finished:
git bisect reset
I am amazed that I’m only just finding out about this awesome feature of Git! I’m sure you’ll love it too, try it!
In PHPStorm, you can do a regex find and replace. To upgrade a crappy old site using <?, just use the following regex:
Just a quick note here, if you are running out of space on your Linux machine and need to find the files taking up the most room, try this command!
du -hsx * | sort -rh | head -10 3.9G logs 85M vendor 79M utils 71M sales 43M products 27M src 23M classes 15M images 14M forms 12M yui
Now that my VM is completely configured through puPHPet’s puphpet/files/exec-once shell scripts, I had to change PHP settings for the legacy 5.3 install. At first I echoed the setting out and concatenated it onto the end of the string, however the setting was already uncommented above.
The answer is to use sed to find and replace the line of text, like this!
cat /etc/php.ini | sed -e "s/short_open_tag = Off/short_open_tag = On/" >> /etc/php.ini