藏匿一个文件

Eog*_*anM 126 git git-stash

我希望能够从单个文件中隐藏更改:

git stash save -- just_my_file.txt
Run Code Online (Sandbox Code Playgroud)

以上不起作用.任何替代品?

Wes*_*ker 144

我认为stash -p这可能是你想要的选择,但是为了防止你将来遇到其他更棘手的事情,请记住:

Stash实际上只是一个非常简单的替代,只是稍微复杂一些branch.Stash对于快速移动事物非常有用,但是你可以通过分支完成更复杂的事情而不会更加头痛和工作.

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master
Run Code Online (Sandbox Code Playgroud)

去做你想做的事,然后简单地rebase和/或mergetmpbranch.这真的不是多的工作时,你需要做更仔细的跟踪比藏匿将允许.

  • 接受是因为提醒分支更好. (7认同)
  • 更明确地说:它们不是注释,而是命令提示符(就像下面答案中的“$”)。两者都经常使用,尽管有时“$”表示普通用户,“#”表示 root/admin。 (3认同)
  • 从好的方面来说,您可以将藏起来变成真正的树枝,而不会造成很大的痛苦。 (2认同)
  • 感谢您使用评论前缀。我希望更多的人在发布命令时这样做。 (2认同)
  • 添加注释前缀有什么好处? (2认同)

Ben*_*ier 51

您可以使用git stash -p(类似于)以交互方式存储单行git add -p.

它不需要文件名,但您可以直接跳过其他文件,d直到您到达要隐藏的文件并将其中的所有更改存储起来a.

  • 我不知道什么时候改变但是从`git 2.14.1`你可以指定文件名`git stash -p <filename> (15认同)
  • 如果您有很多不想隐藏的文件,这需要很长时间。 (4认同)
  • `git stash -p &lt;文件名&gt;` 对我不起作用。相反,“git stash -- &lt;filename&gt;”有效。 (2认同)

sea*_*cal 31

如果不想使用隐藏的更改指定消息,请在双破折号后传递文件名。

$ git stash -- filename.ext
Run Code Online (Sandbox Code Playgroud)

如果是未跟踪/新文件,则必须先上载它。

但是,如果您确实想指定一条消息,请使用push

git stash push -m "describe changes to filename.ext" filename.ext
Run Code Online (Sandbox Code Playgroud)

两种方法都可以在git 2.13+版本中使用

  • `$ git stash -m "message" -- filename.ext` 也可以工作(git v2.31.1) (3认同)
  • 不起作用 2.7.1 (3认同)
  • 在进行修改时,这个答案对我来说似乎是最直接的:“git stash -- filename.ext”、“git commit --amend”、“git stash pop” (2认同)
  • git stash Push 不存在。 (2认同)

Cha*_*esB 19

最好的选择是git stash save --keep-index暂存除此文件之外的所有内容,并告诉stash保留索引,从而存储您的非暂存文件:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index
Run Code Online (Sandbox Code Playgroud)

正如Dan指出的那样,thefiletostash是唯一一个被存储重置的东西,但它也会隐藏其他文件,所以它并不完全是你想要的.

  • 尽管这将索引保持在相同状态,但这是否也隐藏了索引中的文件?换句话说,如果在执行此操作后将索引提交到当前分支,然后切换到另一个分支并执行“ git stash pop”,不是要应用所有文件,而不仅仅是应用我们想要的一个文件藏起来? (2认同)

小智 12

万一你使用'git stash'(并且不使用git stash临时存放它)实际意味着"丢弃更改",在这种情况下你可以使用

git checkout -- <file>
Run Code Online (Sandbox Code Playgroud)

请注意,git stash只是分支和执行操作的快速而简单的替代方法.

  • 问题很明确,没有问如何将更改恢复到一个文件。不赞成投票。 (5认同)
  • 丢弃更改与隐藏更改完全不同。这不是问题的答案。 (4认同)