【问题标题】:Prevent local changes getting pushed in Git防止在 Git 中推送本地更改
【发布时间】:2011-01-11 12:53:30
【问题描述】:

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

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

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

【问题讨论】:

标签: git git-push


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 当您检出另一个分支时,这些配置文件会发生什么?
      • @pomber AFAIK 他们仍然没有受到 git 的影响。
      • 这仅适用于单个存储库策略并且不可推送。您仍然无法通过提交将该更改传播到远程存储库。您必须使用对远程存储库的直接控制台访问来提高标志。
      【解决方案4】:

      解决此问题的一种方法是在向上游推送之前,将工作分支中的每个更改“挑选”到 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)的每个更改挑选到主分支中。

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2015-10-16
        • 1970-01-01
        • 2014-03-02
        • 2013-06-12
        相关资源
        最近更新 更多