views:

285

answers:

3

Hi Git masters! This one is for you!

I have cloned a repository and the master branch in my repo is tracking origin/master. I created a work branch and changed some config files specific to my dev machine to make the app work.

My normal workflow will be to switch to master branch, merge changes made in work branch and push those changes upstream. The problem is that i don't want my specific chnages to get pushed. When i merge my work branch into master those changes are merged also.

The only solution i've found so far is not to commit those changes in work but that's not a satisfactory solution...

Can any of you guys (or ladies) please help me?

Thanks in advance.

Gonçalo Marrafa

+1  A: 

One way to solve this is to "cherry-pick" each change from your work branch into master before you push upstream. I've used a technique where I include a word like NOCOMMIT into the commit message for local changes only, and then use a shell script something like this:

#!/bin/sh

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2`
if [ $BRANCH != "master" ]; then
  echo "$0: Current branch is not master"
  exit 1
fi

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick

This cherry-picks each change that is not marked with NOCOMMIT (or DEBUG) into the master branch.

Greg Hewgill
+2  A: 

If you want to prevent committing (therefore also pushing) these local config files, you could use git update-index --assume-unchanged. Files marked with this flag will be assumed to never change (until you reset the flag with --no-assume-unchanged)

Mauricio Scheffer
+1  A: 

If the files are not already being tracked, you can add them to a .gitignore file to your local repository, otherwise you will need to use git update-index --assume-unchanged like Mauricio said.

Following is more information about .gitignore files:

http://www.kernel.org/pub/software/scm/git/docs/gitignore.html

Waleed Al-Balooshi