V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
andyJado
V2EX  ›  git

git 的 stash 用的多吗?拿来干嘛呢?

  •  
  •   andyJado · 2022-08-13 10:10:27 +08:00 · 6157 次点击
    这是一个创建于 826 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我之前想干个啥就重开分支.

    才学会 stash

    54 条回复    2022-08-14 11:37:26 +08:00
    FrankAdler
        1
    FrankAdler  
       2022-08-13 10:15:07 +08:00 via iPhone   ❤️ 1
    临时切走,保留现场,或者想了一个新方案,之前的想保留下来
    renmu
        2
    renmu  
       2022-08-13 10:15:23 +08:00 via Android   ❤️ 10
    你原来在 dev1 分支开发,然后突然要去 dev2 改个 bug ,但是 dev1 分支没开发完不想提交,那就先 stash
    xingyue
        3
    xingyue  
       2022-08-13 10:19:30 +08:00 via Android   ❤️ 4
    我一般选择 push 上去,后期再 rebase + push -f ,感觉这样比较保险,保证已有的修改不会掉。
    DOLLOR
        4
    DOLLOR  
       2022-08-13 10:20:44 +08:00 via Android   ❤️ 1
    你正在开发 1.2.0 版本,突然汇报 1.1.0 有 bug 需要紧急修复。此时你的工作空间已经充斥 1.2.0 的杂乱状态了,如果想要保存当前状态,然后清理工作空间,可以考虑办法就是用 stash 。
    izzy27
        5
    izzy27  
       2022-08-13 10:42:21 +08:00   ❤️ 1
    保存代码用,用 git stash 就不用走一遍提交的流程了
    PendingOni
        6
    PendingOni  
       2022-08-13 10:52:12 +08:00 via Android
    可以先 stash 贮存一下现有代码的更改 然后 pull 下当前分支的新内容再 unstash 慢慢地手动 merge 差异的地方
    bruce0
        7
    bruce0  
       2022-08-13 11:12:48 +08:00
    楼上说的都很清楚了, 我觉得请有用的,我经常用
    daimubai
        8
    daimubai  
       2022-08-13 11:36:43 +08:00   ❤️ 2
    很常用。尤其是同时一个人负责多个业务模块,经常写到一半要切个分支去改个东西。

    还有就是 先 stash 再 pull ,比先 commit 再 pull 可以少个 merge 记录

    还有就是 尽量别用 rebase 和 push -f ,碰到这样的“打死”
    wudicgi
        9
    wudicgi  
       2022-08-13 11:37:34 +08:00   ❤️ 2
    我用 TortoiseGit 时基本不用这个功能,怕出错,感觉不如建个新的本地临时分支提交一下保险
    Edsie
        10
    Edsie  
       2022-08-13 11:40:18 +08:00   ❤️ 1
    有 Stash 需求的时候,基本都用 IDEA 的 Shelf ,感觉比 Stash 好用
    340244120w
        11
    340244120w  
       2022-08-13 11:43:42 +08:00 via iPhone   ❤️ 1
    我主要就是本地开发的时候,配件文件里大家自己的数据库啊 工作目录啥的可能不一样,再加上不同分支配置文件结构业可能不一样。又不能把自己的提交上去。用 stash 或者 idea 的 shelve [比 stash 好用] 就可以暂存自己的配置文件。哪个分支要用就把对应的文件 unshelve 上去
    Rocketer
        12
    Rocketer  
       2022-08-13 12:03:44 +08:00 via iPhone   ❤️ 1
    从来不用,我都是直接 commit ,并在备注中记录正在做什么,还需要做什么等详情。否则万一离开比较久,回来都不知道干什么了。
    weakish
        13
    weakish  
       2022-08-13 12:26:23 +08:00
    有的時候 stash 時間長了會忘了之前 stash 過,所以我也是更多地像 #12 樓那樣直接 commit ,等過後重新切回來寫完後再 amend 下,以保持歷史整潔。

    還有一個替代方案是用 worktree 新開一個目錄,這樣可以完整保持現場。

    或者也可以在 shell 的命令提示符裏加上顯示倉庫下是否有 stash 的邏輯。
    WhateverYouLike
        14
    WhateverYouLike  
       2022-08-13 12:35:01 +08:00
    楼上没有用 Github Desktop 的吗?在这个里面,随便切一下分支,它都会问你:“当前的改变是要留在当前分支呢,还是带到你要切过去的分支?”,留在当前分支的话,它就会帮你 stash
    rekulas
        15
    rekulas  
       2022-08-13 12:36:13 +08:00
    同 12 13 stash 很少用都是 commit 代替,因为 commit 功能更完善,也有详细的小版本记录,比如我临时离开 commit 下,处理了点其他工作又回来修改会再次临时离开 commit append,每次 commit 也可以查看差异,所以用不上 stash
    Knuth
        16
    Knuth  
       2022-08-13 12:37:57 +08:00
    git stash save "stash 也可以备注"
    crysislinux
        17
    crysislinux  
       2022-08-13 12:40:52 +08:00 via Android
    如果要去别的分支我都一般 commit ,message 就写个 saved ,回来之后接着干 reset 一下。我感觉这样好更不容易搞错。
    creanme
        18
    creanme  
       2022-08-13 13:26:25 +08:00
    不知道为啥有时候 git stash ,然后 git pull ,再 git stash pop ,某些文件会变成删除的状态
    yeqizhang
        19
    yeqizhang  
       2022-08-13 13:30:08 +08:00 via Android
    如果用 idea ,建议用 shelf ,stash 只能把所有未提交的处理。shelf 可以拆分选择指定的处理
    wcp1231
        20
    wcp1231  
       2022-08-13 13:34:32 +08:00   ❤️ 1
    如果用 oh-my-zsh 那么可以用 gwip 和 gunwip 替代,很方便
    andyJado
        21
    andyJado  
    OP
       2022-08-13 13:35:01 +08:00
    @creanme
    被删除的状态可以 reset 恢复吧?
    imycc
        22
    imycc  
       2022-08-13 13:55:10 +08:00
    就是暂存的意思。一般是 A 功能提测,QA 反馈了 Bug ,而我正在 B 功能的分支上开发的时候,stash 一下,切过去处理完,再切回来继续。用的蛮多的。
    没试过切回来之后拖太久没 pop 会怎样,对我来说它就是“暂存”的概念,简单地用是最好的。
    jaoyina
        23
    jaoyina  
       2022-08-13 13:57:03 +08:00
    我觉得挺有用的
    hello2090
        24
    hello2090  
       2022-08-13 13:59:52 +08:00 via iPhone
    你改了 10 来个文件,你现在想把改动比较大的一个恢复到原始状态。你怎么搞?
    jokeface
        25
    jokeface  
       2022-08-13 14:20:58 +08:00
    假如在 dev1 分支 stash 跑的 dev2 分支 pop 会发生啥
    molvqingtai
        26
    molvqingtai  
       2022-08-13 14:33:16 +08:00 via Android
    用的挺多,唯一的缺点就是不能写备注,经常会搞忘了当时 stash 的啥
    dangyuluo
        27
    dangyuluo  
       2022-08-13 14:39:20 +08:00
    没干完活又不想 commit 的时候
    unco020511
        28
    unco020511  
       2022-08-13 14:51:35 +08:00   ❤️ 1
    可以简单的理解为「 git 在本地为你提供的临时存储空间,与工作空间关联,与分支不关联」.使用 idea 时,idea 提供了 shelve 功能可以作为增强型 git stash 使用
    Jooooooooo
        29
    Jooooooooo  
       2022-08-13 15:31:32 +08:00
    我一般的用法是忘记切分支的时候, 先 stash 再切到正确的分支, 再 pop
    andyJado
        30
    andyJado  
    OP
       2022-08-13 15:41:21 +08:00
    @molvqingtai 我用的 gitui, 能写备注的
    Felldeadbird
        31
    Felldeadbird  
       2022-08-13 16:10:13 +08:00
    临时放代码用的。有时候要拉新同步别人代码。

    刚用 git 时经常用,后面我习惯了 commit 到本地一个临时分支。因为有时候忘记了 stash
    wangsongyan
        32
    wangsongyan  
       2022-08-13 16:24:00 +08:00 via iPhone
    不知道是不是我仓库的原因,每次 git stash save/pop 时都很慢😓
    liuhuan475
        33
    liuhuan475  
       2022-08-13 17:16:53 +08:00
    切分支用的吧
    koala9527
        34
    koala9527  
       2022-08-13 17:18:59 +08:00
    紧急处理线上 BUG ,最近才学会,切分支还是有点麻烦。stash 还是方便些。
    zhuzhibin
        35
    zhuzhibin  
       2022-08-13 17:21:13 +08:00
    经常用
    Rache1
        36
    Rache1  
       2022-08-13 17:33:50 +08:00
    @molvqingtai 可以写,跟 commit 一样,加 m 参数
    hello2090
        37
    hello2090  
       2022-08-13 17:46:34 +08:00
    @creanme stash pop 是扔掉那个 stash 吧 你应该用 stash apply?
    hello2090
        38
    hello2090  
       2022-08-13 17:48:36 +08:00
    @molvqingtai git stash save ‘comment‘
    Gota
        39
    Gota  
       2022-08-13 18:10:21 +08:00
    用 Intellij 的话也可以试试它的 Shelve/Unshelve, 同样的效果但不依赖于特定 VCS.
    simonlu9
        40
    simonlu9  
       2022-08-13 18:23:42 +08:00   ❤️ 1
    还是太麻烦啦,频繁切换分支,试试 worktree 吧
    wonderfulcxm
        41
    wonderfulcxm  
       2022-08-13 18:24:43 +08:00 via iPhone
    我也没用,直接 commit 到新的分支。stash 后如果做了修改,再切回来有点奇怪。还不如处理两个 commit 的冲突。
    molvqingtai
        42
    molvqingtai  
       2022-08-13 19:16:43 +08:00
    经常用,但是有个问题 stash 不能写
    @Rache1 #36
    @hello2090 #38
    感谢,又学到了
    kwrush
        43
    kwrush  
       2022-08-13 19:55:07 +08:00 via iPhone
    我主要是同步主分支临时保存下,还有临时去修 bug 保存一下当前进度。commit 会跑一遍 git hook ,一是慢,二是代码没写好只能忽略错误
    creanme
        44
    creanme  
       2022-08-13 19:58:58 +08:00
    @hello2090 应该都可以吧,apply 不会动 stash 里面保存的,而 pop 是删除 stash 里面保存的,应用到现在目录。
    Slurp
        45
    Slurp  
       2022-08-13 20:03:33 +08:00
    我又来宣传 gupa 了:
    > where gupa
    gupav: aliased to git pull --rebase --autostash

    从远程这样拉的话,能够避免额外的 merge 。--autostash 选项相当于 在 git pull --rebase 之前 git stash ,之后 git pop 。
    lovelylain
        46
    lovelylain  
       2022-08-13 20:35:41 +08:00 via Android
    个人觉得不如 commit 好用,stash 后 merge 了其他提交,再 pop 的时候很容易冲突,解决冲突后还得单独 drop 掉,不然后面容易忘了 stash 究竟有没有合并,是哪个分支的。用 commit 就不会有这些问题,临时提交可以用 reset 还原成修改态
    Roojay
        47
    Roojay  
       2022-08-13 21:03:42 +08:00 via Android
    使用 git-svn 的时候,这个就是神器。本地 git commit 完成之后 git svn dcommit 推送到 svn 仓库之前使用缓存不需要提交的文件
    hello2090
        48
    hello2090  
       2022-08-13 21:21:05 +08:00
    @creanme 哦 那有可能,我一般不 pop, 丢掉是肯定的,从名字就可以看出来,不过确实有可能会 apply 上去。
    ooops
        49
    ooops  
       2022-08-13 21:33:48 +08:00
    是这样,你可以先记着有这个功能。等你有场景时能就会用到了。
    DamonLin
        50
    DamonLin  
       2022-08-13 21:41:50 +08:00
    我自己用的频率很高
    lysS
        51
    lysS  
       2022-08-13 22:06:02 +08:00
    我一般新拉一个。话说这算 git 的缺陷把,为什么不能自动 stash?
    yoa1q7y
        52
    yoa1q7y  
       2022-08-13 23:31:24 +08:00
    还有个用法,刚写了几行,不想提交,但是又想下班,可以把改动导出成一个 patch ,拿回家继续搞

    git stash show -p stash@{0} > Stash0.patch

    把 Stash0.patch 这个文件放到网盘或者 U 盘
    darknoll
        53
    darknoll  
       2022-08-14 01:18:16 +08:00 via Android
    经常用
    securityCoding
        54
    securityCoding  
       2022-08-14 11:37:26 +08:00
    一般无脑用 commit ,后面提 MR 的时候 Squash 合成一个(项目组强制)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.