【问题标题】:Git Stashing specific files before a commitGit 在提交之前存储特定文件
【发布时间】:2010-12-07 13:51:21
【问题描述】:

我不确定我正在寻找的是否是 git-stash,但这就是我想要做的。

我有为本地使用定制的配置文件。这些文件已经存在于 Git 中。 现在,如果我添加一个新功能(更改其他文件),我想隐藏我的配置并点击提交,并且只提交与我的新功能相关的文件。

如果我使用 git-stash,它会存储所有内容。 如何存储我的配置文件(仅)?

谢谢

【问题讨论】:

    标签: git


    【解决方案1】:

    两件事。

    1. 您应该只暂存您想要提交的文件。这是使用git add 完成的。即使您有大量更改,您也可以只暂存您想要使用 git add 提交的字段(以及使用 git add -p 的文件片段)。你应该这样做。

    2. 除非您的配置文件是您的应用程序不可或缺的一部分(并且您想要对其进行版本控制),否则您应该ignoreing 甚至不对其进行版本控制。

    【讨论】:

      【解决方案2】:

      使用git add -p 并仅选择您要提交的更改。无论如何,这是一个很好的做法,因为它可以作为一个小的代码审查。

      【讨论】:

        【解决方案3】:

        stash 旨在将所有未提交到任何分支的本地更改保存到临时未命名的分支中。本质上,它的内部结构与分支相同。

        你甚至不应该检查配置文件,如果你这样做了,你应该把它放在一个你只在本地系统上合并的分支中。

        【讨论】:

          【解决方案4】:

          这已经很晚了,但我找到了一个更好的解决方案(几年前)。

          使用 git-assume-status 和 git-unassume-status

          #!/usr/bin/env ruby
          
          # used to ignore modified files -- e.g configuration files
          
          ret=%x{git status --porcelain}
          files=ret.lines.map { |x| x.split[1] }
          
          files.each do |file|
            # makes files resistant to git reset hard
            %x{git update-index --skip-worktree #{file}}
            %x{git update-index --assume-unchanged #{file}}
          end
          

          对于 git-unassume

          #!/usr/bin/env bash
          
          # used to ignore modified files -- e.g configuration files
          
          cd .git
          rm index
          cd ..
          git reset
          

          这样你可以修改你的配置文件,但被 status 和其他 git add 命令忽略。 如果你改变主意,你运行 git-unassume

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-29
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 2017-06-30
            • 2012-06-14
            • 2019-10-30
            • 1970-01-01
            相关资源
            最近更新 更多