防止在Git中推送本地更改

防止在Git中推送本地更改,git,git-push,Git,Git Push,我已经克隆了一个存储库,并且我的repo中的master分支正在跟踪origin/master。我创建了一个work分支,并更改了一些特定于我的开发机器的配置文件,以使应用程序正常工作 我的正常工作流程是切换到主分支机构分支机构,合并在工作分支机构中所做的更改,并将这些更改推送到上游。问题是我不想我的特定技术被推。当我将我的work分支合并到master中时,这些更改也会合并 到目前为止,我找到的唯一解决方案是不在工作中提交这些更改,但这不是一个令人满意的解决方案。解决这一问题的一种方法是,在向

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

我的正常工作流程是切换到
主分支机构
分支机构,合并在
工作
分支机构中所做的更改,并将这些更改推送到上游。问题是我不想我的特定技术被推。当我将我的
work
分支合并到
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)的每个更改拾取到主分支中。

如果要防止提交(因此也推送)这些本地配置文件,可以使用。标记有此标志的文件将被假定为永远不会更改(除非您使用--no-assession unchanged重置标志)

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

以下是有关.gitignore文件的详细信息:


您需要的是一个.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

这样的配置文件根本不应该在存储库中--请删除它们。签出另一个分支时,这些配置文件可能会重复吗?@pomber AFAIK它们不会被git触及。这只适用于单个存储库策略,不可推送。您仍然无法通过提交将该更改传播到远程存储库。您必须使用对远程存储库的直接控制台访问来提升该标志。