As I discussed here, git allows you to commit only some of the changes you made to a given file. If you are working in Emacs you probably already know the wonders of Magit. In order to do the same partial committing of a file you can simply open
magit-status and go to the file you’re interested in. This will highlight the changed parts of the text. With your cursor in the changed block you’d like to commit simply press s and that change will be staged. If this is all you want press c to commit and you’re done!
If you only want to commit some of the changes to a file in a Git repository, use
git add --patch your_changed_file
This will interactively ask you which lines to keep:
$ git add --patch .emacs
diff --git a/.emacs b/.emacs
index d903495..5a0eb9e 100644
@@ -69,9 +69,9 @@
;;; Make better buffer names when opening files with the same name
-(when (autoload 'uniquify "uniquify" "uniquify" t)
+(when (require 'uniquify nil 'noerror)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
Stage this hunk [y,n,q,a,d,/,K,j,J,g,s,e,?]?
Source and more information on StackOverflow.com.
After upgrading my Ubuntu 13.10 installation to 14.04, I noticed that the output of several git commands (e.g.
git diff and
git log) didn’t show colours as they used to, but showed
ESC[ ANSI codes instead.
A quick internet search lead to this post on unix.stackexchange.com where the
LESS environment variable was ‘blamed’. Indeed, I have my
LESS variable (re-) defined in my
The solution was to add
-R to the environment variable, which allows raw control characters to be displayed. I now have the environment variable defined as:
Today I wanted to create a new git repository that should contain several subdirectories that each were initially stored as separate git repos. Of course I didn’t want to lose the history. Thanks to user ebneter‘s answer at StackOverflow I was able to do so. These are the steps I took:
git init # Make empty new 'container' repo (no need to create a subdir at this point yet)
git remote add oldrepo /path/to/oldrepo
git fetch oldrepo
git checkout -b olddir oldrepo/master
git mv stuff olddir/stuff # as necessary
git commit -m "Moved stuff to olddir"
git checkout master
git merge olddir # should add olddir/ to master
git remote rm oldrepo
git branch -d olddir # to get rid of the extra branch before pushing
git push # if you have a remote, that is
I’m in the process of moving several of my projects that used Bazaar (
bzr) for revision control to Git. Converting a repository from
git is very easy when using the fastimport package. In a Debian-based distribution run the following command to install the package (don’t be fooled by its name, it also contains the fastexport option):
sudo aptitude install bzr-fastimport
The go into the directory that contains your bzr repo and run:
bzr fast-export `pwd` | git fast-import
You can now check a few things, e.g. running
git log to see whether the change log was imported correctly. This is also the moment to move the content of your
.bzrignore file to a
If all is well, let’s clean up:
rm -r .bzr
git reset HEAD
Thanks to Ron DuPlain for his post here, from which I got most of this info.