A list of stupid Git tricks so I don't have to keep remembering them.
Oops, I messed up.
This will remove anything staged but not committed:
git reset --hard
If you really messed up, this will remove all untracked files/directories as well:
git clean -df .
If you already committed but haven't pushed yet, this will remove the latest commit, but keep the changes in your local working directory:
git reset --soft HEAD~1
If you already committed and pushed:
git revert [commithash]
Git is giving me permission denied errors on settings.php. What now?
sudo git checkout -- sites/default
chmod ug+w sites/default
I have an anonymous clone, but I have commit access to the project. How do I switch to my authenticated URL?
So you were originally just a mere end-user of a project, but then you filed one too many patches and went and got made a maintainer, eh? ;) Don't panic, here's a simple command to bless your clone with commit access:
git remote set-url origin firstname.lastname@example.org:sandbox/greggles/1481160.git
/HT @wereHamster in #git
I have the opposite problem of that; I have an authenticated clone but now want to switch it to anonymous
git remote add readonly http://git.drupal.org/project/drupal.git;
git fetch readonly;
git checkout -bt mybranch readonly/8.x
I have clumsy fingers and keep mis-typing commands like "git pusj"
There's a config option for that!
git config --global help.autocorrect 3
Will give output like this:
$ git pusj
WARNING: You called a Git command named 'pusj', which does not exist.
Continuing under the assumption that you meant 'push'
in 0.3 seconds automatically...
/HT @cyberswat in #drupal-contribute
git apply says it can't apply but I swear it's lying.
Yeah, Git is stupid about context changes that happened elsewhere in the file and thinking that it broke the patch in question. Help it smarten up with:
git apply --index --3way foo.patch
/HT @timplunkett in #drupal-contribute
When applying a patch, I'm getting an error that a file already exists, but I triple-checked and my working directory is clean. WAT?
error: core/vendor/phpunit/php-timer/tests/TimerTest.php: already exists in working directory
Welcome to the special hell that is case insensitive file systems! :D This will happen on OS X if, for example, you currently have a file like:
and the patch is trying to change it to:
(note the case of the directory "Tests")
Luckily, there is a very slick workaround outlined in https://coderwall.com/p/mgi8ja/case-sensitive-git-in-mac-os-x-like-a-pro which I will copy/paste here for posterity:
Here's what you do:
- Launch Disk Utility
- Choose "New Image"
- Enter a nice Name for your Volume, e.g "Workspace"
- Set the size to something that will most likely fit your needs (resizing is a whole another story)
- Select "Mac OS Extended (Case-sensitive, Journaled)" in "Format".
- Select "Single Partition - Apple Partition Map" in "Partitions"
- Ensure "sparse bundle disk image" is set in "Image Format".
- Save it somewhere on your hard drive
Now, when you mount this disk image you can move all your git repos over to this Volume to enjoy a git that doesn't get confused by those pesky case-changes!
(PS: You can choose to add the Disk Image created to your Login Items in the OS X System Preferences to have it automatically mount on boot)