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
Tag: git
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 --- a/.emacs +++ b/.emacs @@ -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.
Related Images:
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 .bashrc
and .zshrc
files.
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:
LESS='--quiet -X -F -R' |
Related Images:
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:
mkdir new_combined_repo 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 mkdir olddir 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 commit 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
Related Images:
I’m in the process of moving several of my projects that used Bazaar (bzr
) for revision control to Git. Converting a repository from bzr
to 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:
git init 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 .gitignore
file.
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.