Git存储单个未跟踪文件?

题:

我有几个如下所列的编辑文件,也有一些新创建的文件

存储文件列表

现在我想db/migrate/20161212071336_add_paranoid_fields.rb未跟踪的文件(在这种情况下,它是db/migrate/20161212071336_add_paranoid_fields.rb ,但不能db/migrate/20161212071336_add_paranoid_fields.rb更改后的文件)。

我应该怎么做?

为什么我想存储一个未跟踪的文件

我首先创建了这个文件,然后我意识到我不需要立即(它需要被删除才能让我的程序正常工作); 但将来我可能需要它。

我搜查过的东西(而不是给我一个答案),以及他们没有帮助的原因

  • 你如何隐藏未跟踪的文件?
  • 这会隐藏所有文件; 我只想存储一个文件。
  • 我怎样才能保存一个特定的文件?
  • 它建议使用stash -p ,但这只会隐藏跟踪的文件。

  • 如果你只有这个未跟踪的文件,你可以这样做:

    git add -u
    git stash --include-untracked --keep-index
    

    那只会将未跟踪的文件添加到存储中,并将其从工作目录中删除。

    如果你有几个未经过检查的文件,并且你只想将这个文件包含到存储中,那么你将不得不提交一个文件,然后存储单个文件,然后重置

    git add -u
    git commit -m "temp commit"
    git add my_file_to_stash
    git stash
    git reset --hard HEAD^
    

    这里精妙的是,当您稍后恢复存储时,该文件将被添加到索引中。 这可能是一件好事,因为它会提醒你这个文件很重要。


    gsts其他答案中提供的信息,我创建了一个脚本git-stash-selection ,我使用别名gsts

    #!/bin/sh
    #
    # Git stash only a selection of files, with a message.
    #
    # Usage:
    #   git-stash-selection [<message>] [<paths>...]
    
    message=$1
    shift
    stash_paths="$*"
    git add --all
    git reset $stash_paths
    git commit --allow-empty -m "temp - excluded from stash"
    git add --all
    git stash save $message
    git reset --soft HEAD^
    git reset
    

    我已经提供了有关所用方法的另一个答案的全部细节,以及为什么一些更简单的命令不起作用。

    编辑:这可能能够使用此修补程序方法而不是提交进行改进。 或者可能使用另一个藏匿处


    存储不提供此功能。 由于你想实现的是将这个文件作为附加开发的一部分,所以最好保存在一个分支中。

    脚步:

  • 存储修改后的文件(您要保留的文件将保持不变,因为它未被跟踪。
  • 创建一个新的分支并在那里记录文件
  • 回到原来的分支
  • 命令:

    git stash
    git checkout -b paranoid_fields
    git add db/migrate/20161212071336_add_paranoid_fields.rb
    git commit
    git checkout master
    git stash pop
    

    当你想恢复文件时:

    git merge paranoid_fields
    

    将退还。

    如果你只想看看这个文件:

    git show paranoid_fields:db/migrate/20161212071336_add_paranoid_fields.rb
    
    链接地址: http://www.djcxy.com/p/24515.html

    上一篇: Git stash single untracked file?

    下一篇: Stash selected files with Git Extensions