防止在Git中推送本地更改

时间:2010-01-31 22:52:58

标签: git git-push

我克隆了一个存储库,我的仓库中的master分支正在跟踪origin/master。我创建了一个work分支并更改了一些特定于我的开发机器的配置文件,以使应用程序正常工作。

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

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

4 个答案:

答案 0 :(得分:82)

如果您想阻止提交(因此也推送)这些本地配置文件,您可以使用git update-index --assume-unchanged。标记为此标志的文件将被假定为永不更改(直到您使用--no-assume-unchanged重置标志)

答案 1 :(得分:8)

如果文件尚未被跟踪,您可以将它们添加到.gitignore文件到您的本地存储库,否则您将需要像Mauricio所说的那样使用git update-index --assume-unchanged

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

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

答案 2 :(得分:5)

解决这个问题的一种方法是在推进上游之前“挑选”从工作分支到主人的每个变化。我使用了一种技术,我在提交消息中包含像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

这个樱桃挑选每个用NOCOMMIT(或DEBUG)标记的的变化进入主分支。

答案 3 :(得分:1)

您需要的是.gitignore文件,并在.gitignore文件中添加所有配置文件。

准备好.gitignore文件后,您可能需要从缓存中删除配置文件

这是命令:

(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