Difference between revisions of "Git/hacks"

From Freephile Wiki
< Git
Jump to navigation Jump to search
(adds a couple example commands)
(adds recipe for ignoring directory with exception)
Line 16: Line 16:
 
<source lang="bash">
 
<source lang="bash">
 
git log --stat
 
git log --stat
 +
</source>
 +
 +
How do you ignore a directory, but make an exception?  What if you already added certain directories to git but want to stop tracking them now (ie. "take them out of version control")?
 +
A combination of editting your <code>.gitignore</code> file and <code>git rm --cached</code> to the rescue.  I had accidentally added and committed some files into git which should have been ignored because they are 3rd party files managed by [[Composer]].  I fixed my <code>.gitignore</code> to track only what I want while ignoring a parent directory:
 +
 +
<pre>
 +
/nbproject/*
 +
# ignore everything in the 'vendor' directory
 +
/vendor/*
 +
# but don't ignore the 'eqt' directory
 +
!/vendor/eqt/
 +
</pre>
 +
Then you simply remove all files from git's index, and add them back (only now adding them back will look to .gitignore for the corrected rules)
 +
<source lang="bash">
 +
git rm -r --cached .
 +
git add .
 +
git commit -m 'ignoring vendor/*'
 
</source>
 
</source>
  
  
 
[[Category:Development]]
 
[[Category:Development]]

Revision as of 14:05, 24 July 2015

See all the changes in color, but without any context lines, and without the leading +/-/[space] This makes it easy to grab changes and stuff them in another file for example.

git diff -U0 --color myfile | sed -r "s/^([^-+ ]*)[-+ ]/\\1/"


You forgot to add a file to the last commit? Just add it to the index, and commit with --amend. If you leave off the -m (message) option in the new commit, it will let you re-use the last commit message. This lets you "undo the last commit" and redo it right. You usually do not want to amend a commit if you've already pushed it to other repos, but if it's just local --amend is awesome-sauce.

git add forgotten.php
git commit --amend
git log --stat

What's the commit history? --stat gives a nice view of what happened in the log.

git log --stat

How do you ignore a directory, but make an exception? What if you already added certain directories to git but want to stop tracking them now (ie. "take them out of version control")? A combination of editting your .gitignore file and git rm --cached to the rescue. I had accidentally added and committed some files into git which should have been ignored because they are 3rd party files managed by Composer. I fixed my .gitignore to track only what I want while ignoring a parent directory:

/nbproject/*
# ignore everything in the 'vendor' directory
/vendor/*
# but don't ignore the 'eqt' directory
!/vendor/eqt/

Then you simply remove all files from git's index, and add them back (only now adding them back will look to .gitignore for the corrected rules)

git rm -r --cached .
git add .
git commit -m 'ignoring vendor/*'