在git中,是否有一种方法可以检出除1或2个文件之外的所有文件?

5
有时我会遇到这样的情况,我希望将工作区中除了1或2个文件以外的所有内容都删除。是否有一种简单的方法可以做到这一点呢?目前,我一直在手动输入“git checkout ....”来检出我想要从索引中检出的文件,并且不包括我想要保留的文件,但这很费力。
另一种做法是将我想要保留的1或2个文件存储起来,然后执行“checkout .”,最后再恢复之前存储的文件。这种方式可行吗?

这个回答解决了你的问题吗?Git:检出除一个文件之外的所有文件 - Vinícius M
1个回答

10

我偶尔也想进行相同的操作,通常会使用以下一组命令(假设索引中没有任何内容):

git add file-to-preserve-1 file-to-preserve-2
git stash save --keep-index "Changes discarded because ..."
# git stash drop # think twice before running this command
git reset

用话来说:

  1. 将需要保留的文件添加到索引中。
  2. 隐藏所有更改(可以加上有意义的信息),但不要触动索引。
  3. 放弃已隐藏的更改(仅当您确定它们无用时)。
  4. 重置索引。

我能想到的另一种方法(实际上没有试过,第一个方法对我来说很好用):

git update-index --skip-worktree file-to-preserve-1 file-to-preserve-2
git checkout .
git update-index --no-skip-worktree file-to-preserve-1 file-to-preserve-2

解释:

  1. 命令 git 忽略某些文件。
  2. 检出当前目录中的所有内容。
  3. 告诉 git 再次将来自 1 的文件视为通常情况下的文件。

解释:

  1. 命令git忽略某些文件。
  2. 检出当前目录中的所有内容。
  3. 告诉git再次将来自1的文件视为通常情况下的文件。

1
这是一个不错的工作流程,但个人会跳过 git stash drop 步骤。令人惊讶的是,你经常会发现自己需要刚刚丢弃的更改;更令人惊讶的是,在你按下删除键 2 毫秒后,你就会意识到这一点! - William Pursell
@WilliamPursell,你说得对,我做了一些修改。好的是,git会在屏幕上打印出已删除存储的哈希值,最重要的是不要丢失这些信息。 - xaizek
1
你可以给stash添加一个有用的信息,例如:git stash save --keep-index discard-reason - Useless
@Useless,说得好,已编辑。我总是承诺给储存项提供有用的信息,但最终只有十分之一的项目都被命名为“WIP on ...”。... - xaizek

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