防止本地更改在Git中被推送

64
我克隆了一个代码库,并且我的代码库中的 master 分支正在追踪 origin/master。我创建了一个 work 分支,并修改了一些特定于我的开发机器的配置文件以使应用程序正常运行。
我的常规工作流程是切换到 master 分支,将 work 分支中所做的更改合并并将这些更改上传到上游。问题在于,我不想让我的特定更改被推送。当我将 work 分支合并到 master 时,这些更改也会被合并。
到目前为止,我找到的唯一解决方案是不在 work 中提交这些更改,但这不是一个令人满意的解决方案。

3
这样的配置文件根本不应该出现在代码库中,应该将它们删除。 - William Pursell
如何防止 Git 推送对某些文件的更改? - vava
1
https://dev59.com/w3RB5IYBdhLWcg3wV156 - Mauricio Scheffer
可能是提交机器特定配置文件的重复问题。 - Senseful
4个回答

84

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


当您切换到另一个分支时,这些配置文件会发生什么? - pomber
据我所知,它们在 Git 中保持不变。 - Mauricio Scheffer
这仅适用于单个存储库策略,且不可推送。您仍无法通过提交将该更改传播到远程存储库。您必须使用直接控制台访问远程存储库以提高标志。 - Andry

8
如果这些文件还没有被跟踪,您可以将它们添加到本地存储库的.gitignore文件中,否则您需要像Mauricio所说的那样使用 git update-index --assume-unchanged
以下是有关.gitignore文件的更多信息:

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


7

解决这个问题的一种方法是在将代码推送到上游之前,从你的工作分支中“挑选”每个更改并合并到主分支中。我使用了一种技术,其中我在提交信息中包含类似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)的更改挑选出来,合并到主分支中。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接