防止在Git中推送本地更改

我已经克隆了一个仓库,我的仓库中的master分支正在跟踪origin/master 。 我创build了一个work分支,并改变了一些特定于我的开发机器的configuration文件,使应用程序工作。

我的正常工作stream程将切换到master分支,合并在work分支中work更改,并向上游push这些更改。 问题是我不希望我的特定chnages被推。 当我把我的work分支合并到master这些更改也合并。

到目前为止,我发现的唯一解决scheme并不是在work提交这些更改,但这不是一个令人满意的解决scheme。

如果你想防止提交(因此也推)这些本地configuration文件,你可以使用git update-index –assume-unchanged 。 标有这个标志的文件将被认为永远不会改变(直到你用–no-assume-不变)重置标志)

如果文件还没有被跟踪,你可以将它们添加到一个.gitignore文件到你的本地仓库,否则你将需要使用git update-index --assume-unchanged像Mauricio所说的那样。

以下是有关.gitignore文件的更多信息:

http://git-scm.com/docs/gitignore

解决这个问题的一个办法就是,在你向上游推进之前,把你的工作分支变成主人。 我已经使用了一种技术,将NOCOMMIT这样的单词包含在仅用于本地更改的提交消息中,然后使用如下所示的shell脚本:

 #!/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 

这个樱桃select每个没有用NOCOMMIT(或DEBUG)标记的变化到主分支。

你需要的是一个.gitignore文件,并将所有的configuration文件添加到.gitignore文件中。

一旦你的.gitignore文件准备好了,你可能需要从caching中删除你的configuration文件

这是命令:

 (Assume you use linux) vi .gitignore //Add all your config file inside //run the following command to remove your config file from GIT cache if your config files is already track by GIT git rm --cached myconfig.php