63

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

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

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

4

4 回答 4

83

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

于 2010-01-31T23:23:45.937 回答
8

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

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

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

于 2010-01-31T23:32:24.460 回答
6

解决此问题的一种方法是在向上游推送之前将工作分支中的每个更改“挑选”到 master 中。我使用了一种技术,在提交消息中包含一个像 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)的每个更改挑选到主分支中。

于 2010-01-31T23:20:18.273 回答
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
于 2010-12-21T04:02:09.720 回答