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

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

  •  
  •   andyJado · 51 天前 · 4870 次点击
    这是一个创建于 51 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    才学会 stash

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

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

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

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

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

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

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

    git stash show -p [email protected]{0} > Stash0.patch

    把 Stash0.patch 这个文件放到网盘或者 U 盘
    darknoll
        53
    darknoll  
       50 天前 via Android
    经常用
    securityCoding
        54
    securityCoding  
       50 天前
    一般无脑用 commit ,后面提 MR 的时候 Squash 合成一个(项目组强制)
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2122 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 15:09 · PVG 23:09 · LAX 08:09 · JFK 11:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.