我克隆了一个存储库,我的仓库中的master
分支正在跟踪origin/master
。我创建了一个work
分支并更改了一些特定于我的开发机器的配置文件,以使应用程序正常工作。
我的正常工作流程是切换到master
分支,合并work
分支中的更改和push
上游的更改。问题是我不希望我的特定chnages被推。当我将work
分支合并到master
时,这些更改也会合并。
到目前为止,我发现的唯一解决方案是不在work
中提交这些更改,但这不是一个令人满意的解决方案。
答案 0 :(得分:82)
如果您想阻止提交(因此也推送)这些本地配置文件,您可以使用git update-index --assume-unchanged。标记为此标志的文件将被假定为永不更改(直到您使用--no-assume-unchanged重置标志)
答案 1 :(得分:8)
如果文件尚未被跟踪,您可以将它们添加到.gitignore文件到您的本地存储库,否则您将需要像Mauricio所说的那样使用git update-index --assume-unchanged
。
以下是有关.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