我对文件进行了更改,加上一个新文件,并希望在切换到另一个任务时使用git stash将它们删除.但git stash本身只会隐藏对现有文件的更改; 新文件仍然存在于我的工作树中,使我未来的工作变得混乱.如何存放这个未跟踪的文件?
syk*_*ora 1705
2018年5月17日更新:
新版本的git现在可以存储git stash --include-untracked所有文件,包括未跟踪和忽略的文件.
git stash --all不再触及被忽略的文件(在git 2.16.2上测试).
原答案如下:
警告,如果您的gitignore文件中有任何目录/*条目,执行此操作将永久删除您的文件.
从版本1.7.7开始,您可以使用git stash --include-untracked或git stash --include-untracked存储未跟踪的文件,而无需对其进行暂存.
添加(git stash save -u)文件并开始跟踪它.然后藏匿.由于文件的全部内容都是新的,因此它们将被隐藏,您可以根据需要对其进行操作.
Joh*_*ary 398
从git 1.7.7开始,git stash接受--include-untracked选项(或简写-u).要在存储中包含未跟踪的文件,请使用以下任一命令:
git stash --include-untracked
git stash -u
Run Code Online (Sandbox Code Playgroud)
警告,如果您的gitignore文件中有任何目录/*条目,执行此操作将永久删除您的文件.
ski*_*ppy 74
将文件添加到索引:
git add path/to/untracked-file
git stash
Run Code Online (Sandbox Code Playgroud)
索引的全部内容以及对现有文件的任何未分级更改都将使其成为存储.
Dol*_*ava 51
在git bash中,使用该命令可以实现对未跟踪文件的存储
git stash --include-untracked
Run Code Online (Sandbox Code Playgroud)
要么
git stash -u
Run Code Online (Sandbox Code Playgroud)
http://git-scm.com/docs/git-stash
git stash从工作区中删除任何未跟踪或未提交的文件.您可以使用以下命令恢复git stash
git stash pop
Run Code Online (Sandbox Code Playgroud)
这会将文件放回本地工作区.
我的经验
我不得不对我的gitIgnore文件执行修改,以避免将.classpath和.project文件移动到远程仓库中.到目前为止,我不允许在远程仓库中移动此修改后的.gitIgnore.
.classpath和.project文件对eclipse很重要 - 这是我的java编辑器.
我首先有选择地添加了我的其余文件并提交了暂存.但是,除非修改后的.gitIgnore fiels和未跟踪的文件,否则无法执行最终推送..project和.classpath没有被隐藏.
我用了
git stash
Run Code Online (Sandbox Code Playgroud)
用于存储修改后的.gitIgnore文件.
对于存储.classpath和.project文件,我用过
git stash --include-untracked
Run Code Online (Sandbox Code Playgroud)
它从我的工作区中删除了文件.缺少这些文件会剥夺我在eclipse中工作的能力.我继续完成将提交的文件推送到远程的过程.一旦成功完成,我就用了
git stash pop
Run Code Online (Sandbox Code Playgroud)
这会将相同的文件粘贴回我的工作区.这让我有机会在eclipse中处理同一个项目.希望这可以撇开误解.
小智 27
2.35版本新增
\ngit stash\xe2\x80\x98s 新的 --staged 模式可以轻松地隐藏暂存区域中已有的内容,而不是其他任何内容。您可以将其视为 git commit (仅写入分阶段更改),但它不是创建新提交,而是向存储中写入新条目。然后,当您\xe2\x80\x99 准备好时,您可以恢复您的更改(使用 git stash pop)并继续工作。
\ngit add -A\ngit stash --staged\nRun Code Online (Sandbox Code Playgroud)\n
lin*_*des 20
正如其他地方所说,答案是git add文件.例如:
git add path/to/untracked-file
git stash
Run Code Online (Sandbox Code Playgroud)
但是,另一个答案也提出了这个问题:如果你真的不想添加文件怎么办?好吧,据我所知,你必须这样做.而下面将不工作:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
Run Code Online (Sandbox Code Playgroud)
这将失败,如下:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Run Code Online (Sandbox Code Playgroud)
所以,你可以做什么?好吧,你必须真正添加文件,但是,您可以在以后有效地取消添加它git rm --cached:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Run Code Online (Sandbox Code Playgroud)
然后,您可以继续工作,处于与之前相同的状态git add(即调用未跟踪的文件path/to/untracked-file;以及您可能必须跟踪文件的任何其他更改).
工作流程的另一种可能性是:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
Run Code Online (Sandbox Code Playgroud)
[注意:如@mancocapac的评论中所述,您可能希望添加--exclude-standard到git ls-files命令(所以git ls-files -o --exclude-standard).]
...也可以很容易编写脚本 - 甚至别名也可以(用zsh语法表示;根据需要调整)[另外,我缩短了文件名,所以它都适合屏幕而不滚动这个答案; 随意替换您选择的备用文件名]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Run Code Online (Sandbox Code Playgroud)
需要注意的是,后者可能是作为一个shell脚本或功能,允许参数以提供给更好的git stash,如果你不想pop,但是apply,和/或希望能够指定一个特定的藏匿处,而不是只考虑顶部一.也许这个(而不是上面的第二个别名)[空格被剥离以适应而不滚动; 重新添加以增加易读性]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Run Code Online (Sandbox Code Playgroud)
注意:在此表单中,如果要提供存储标识符,则需要提供操作参数和标识符,例如unstashall apply stash@{1}或unstashall pop stash@{1}
你当然会把你.zshrc或同等的东西长期存在.
希望这个答案对某人有帮助,将所有内容整合在一起.
Muh*_*Ali 17
要将未跟踪的文件包含在 stash 中,您可以在命令中使用--include-untracked或选项。-ugit stash
git stash --include-untracked
Run Code Online (Sandbox Code Playgroud)
或者
git stash -u
Run Code Online (Sandbox Code Playgroud)
解释:
当您运行git stash时有未提交的更改(包括新文件)时,Git 会将您的更改保存在一个名为stash. 但是,默认情况下,git stash仅保存跟踪的文件。任何新的、未跟踪的文件都不会包含在存储中。
如果您已将新文件添加到存储库然后运行git stash,则存储操作将不会保存新文件。新文件将在您的工作目录中保持未跟踪状态。
git stash --include-untracked或 git stash -u会将修改后的跟踪文件和任何未跟踪的文件保存在存储中,以便您稍后使用git stash apply或检索它们git stash pop。
use*_*513 15
在git版本2.8.1:以下为我工作.
在没有名称的存储中保存已修改和未跟踪的文件
git stash save -u
Run Code Online (Sandbox Code Playgroud)
使用名称保存已存储的已修改和未跟踪文件
git stash save -u <name_of_stash>
Run Code Online (Sandbox Code Playgroud)
您可以使用pop和以后应用,如下所示.
git stash pop
git stash apply stash@{0}
Run Code Online (Sandbox Code Playgroud)
Rya*_*yan 11
我很惊讶这个页面上没有提到其他答案git stash push。
这篇文章帮助我理解:
该命令
git stash是 的简写git stash push。在此模式下,不允许使用非选项参数来防止拼写错误的子命令生成不需要的存储条目。此命令还有另一个别名,git stash save但已弃用,取而代之的是git stash push.默认情况下,git 在进行 stash 时会忽略未跟踪的文件。如果需要将这些文件添加到存储中,您可以使用
-u告诉 git 包含未跟踪文件的选项。如果-a指定了选项,也可以添加忽略的文件。-a将包括未跟踪和忽略的文件。
我关心命名我的隐藏文件,我希望它们包含未跟踪的文件,所以我最常运行的命令是: git stash push -u -m "whatIWantToNameThisStash"
我能藏匿只是做未跟踪文件:
git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}
Run Code Online (Sandbox Code Playgroud)
最后一个弹出被跟踪文件的藏匿处,因此只留下未跟踪的文件.
VS 2019 及更高版本中提供了存储功能。
Ctrl + Alt + F7Commit All现在按或按钮附近的下拉键Commit staged即可查看隐藏选项如果您想隐藏未跟踪的文件,例如Git ignored files或Files which are not included into project然后选择此选项
阅读此答案,了解 Visual Studio 中 Git stash 的完整用法: /sf/answers/4893392521/
如果您想隐藏未跟踪的文件,但保留索引文件(例如您要提交的文件),只需将-k(保留索引)选项添加到-u
git stash -u -k
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
390692 次 |
| 最近记录: |