5

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

 2 years ago
source link: https://www.v2ex.com/t/872573
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  git

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

  andyJado · 17 小时 34 分钟前 · 3488 次点击

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

才学会 stash

53 条回复    2022-08-14 01:18:16 +08:00
FrankAdler

FrankAdler      17 小时 30 分钟前 via iPhone   ❤️ 1

临时切走,保留现场,或者想了一个新方案,之前的想保留下来
renmu

renmu      17 小时 29 分钟前 via Android   ❤️ 10

你原来在 dev1 分支开发,然后突然要去 dev2 改个 bug ,但是 dev1 分支没开发完不想提交,那就先 stash
xingyue

xingyue      17 小时 25 分钟前 via Android   ❤️ 4

我一般选择 push 上去,后期再 rebase + push -f ,感觉这样比较保险,保证已有的修改不会掉。
DOLLOR

DOLLOR      17 小时 24 分钟前 via Android   ❤️ 1

你正在开发 1.2.0 版本,突然汇报 1.1.0 有 bug 需要紧急修复。此时你的工作空间已经充斥 1.2.0 的杂乱状态了,如果想要保存当前状态,然后清理工作空间,可以考虑办法就是用 stash 。
izzy27

izzy27      17 小时 3 分钟前   ❤️ 1

保存代码用,用 git stash 就不用走一遍提交的流程了
PendingOni

PendingOni      16 小时 53 分钟前 via Android

可以先 stash 贮存一下现有代码的更改 然后 pull 下当前分支的新内容再 unstash 慢慢地手动 merge 差异的地方
bruce0

bruce0      16 小时 32 分钟前

楼上说的都很清楚了, 我觉得请有用的,我经常用
daimubai

daimubai      16 小时 8 分钟前   ❤️ 2

很常用。尤其是同时一个人负责多个业务模块,经常写到一半要切个分支去改个东西。

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

还有就是 尽量别用 rebase 和 push -f ,碰到这样的“打死”
wudicgi

wudicgi      16 小时 7 分钟前   ❤️ 2

我用 TortoiseGit 时基本不用这个功能,怕出错,感觉不如建个新的本地临时分支提交一下保险
Edsie

Edsie      16 小时 5 分钟前   ❤️ 1

有 Stash 需求的时候,基本都用 IDEA 的 Shelf ,感觉比 Stash 好用
340244120w

340244120w      16 小时 1 分钟前 via iPhone   ❤️ 1

我主要就是本地开发的时候,配件文件里大家自己的数据库啊 工作目录啥的可能不一样,再加上不同分支配置文件结构业可能不一样。又不能把自己的提交上去。用 stash 或者 idea 的 shelve [比 stash 好用] 就可以暂存自己的配置文件。哪个分支要用就把对应的文件 unshelve 上去
Rocketer

Rocketer      15 小时 41 分钟前 via iPhone   ❤️ 1

从来不用,我都是直接 commit ,并在备注中记录正在做什么,还需要做什么等详情。否则万一离开比较久,回来都不知道干什么了。
weakish

weakish      15 小时 18 分钟前

有的時候 stash 時間長了會忘了之前 stash 過,所以我也是更多地像 #12 樓那樣直接 commit ,等過後重新切回來寫完後再 amend 下,以保持歷史整潔。

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

或者也可以在 shell 的命令提示符裏加上顯示倉庫下是否有 stash 的邏輯。
WhateverYouLike

WhateverYouLike      15 小时 10 分钟前

楼上没有用 Github Desktop 的吗?在这个里面,随便切一下分支,它都会问你:“当前的改变是要留在当前分支呢,还是带到你要切过去的分支?”,留在当前分支的话,它就会帮你 stash
rekulas

rekulas      15 小时 9 分钟前

同 12 13 stash 很少用都是 commit 代替,因为 commit 功能更完善,也有详细的小版本记录,比如我临时离开 commit 下,处理了点其他工作又回来修改会再次临时离开 commit append,每次 commit 也可以查看差异,所以用不上 stash
Knuth

Knuth      15 小时 7 分钟前

git stash save "stash 也可以备注"
crysislinux

crysislinux      15 小时 4 分钟前 via Android

如果要去别的分支我都一般 commit ,message 就写个 saved ,回来之后接着干 reset 一下。我感觉这样好更不容易搞错。
creanme

creanme      14 小时 18 分钟前

不知道为啥有时候 git stash ,然后 git pull ,再 git stash pop ,某些文件会变成删除的状态
yeqizhang

yeqizhang      14 小时 15 分钟前 via Android

如果用 idea ,建议用 shelf ,stash 只能把所有未提交的处理。shelf 可以拆分选择指定的处理
wcp1231

wcp1231      14 小时 10 分钟前   ❤️ 1

如果用 oh-my-zsh 那么可以用 gwip 和 gunwip 替代,很方便
andyJado

andyJado      14 小时 10 分钟前

@creanme
被删除的状态可以 reset 恢复吧?
imycc

imycc      13 小时 50 分钟前

就是暂存的意思。一般是 A 功能提测,QA 反馈了 Bug ,而我正在 B 功能的分支上开发的时候,stash 一下,切过去处理完,再切回来继续。用的蛮多的。
没试过切回来之后拖太久没 pop 会怎样,对我来说它就是“暂存”的概念,简单地用是最好的。
jaoyina

jaoyina      13 小时 48 分钟前

我觉得挺有用的
hello2090

hello2090      13 小时 45 分钟前 via iPhone

你改了 10 来个文件,你现在想把改动比较大的一个恢复到原始状态。你怎么搞?
jokeface

jokeface      13 小时 24 分钟前

假如在 dev1 分支 stash 跑的 dev2 分支 pop 会发生啥
molvqingtai

molvqingtai      13 小时 12 分钟前 via Android

用的挺多,唯一的缺点就是不能写备注,经常会搞忘了当时 stash 的啥
dangyuluo

dangyuluo      13 小时 6 分钟前

没干完活又不想 commit 的时候
unco020511

unco020511      12 小时 53 分钟前   ❤️ 1

可以简单的理解为「 git 在本地为你提供的临时存储空间,与工作空间关联,与分支不关联」.使用 idea 时,idea 提供了 shelve 功能可以作为增强型 git stash 使用
Jooooooooo

Jooooooooo      12 小时 13 分钟前

我一般的用法是忘记切分支的时候, 先 stash 再切到正确的分支, 再 pop
andyJado

andyJado      12 小时 4 分钟前

@molvqingtai 我用的 gitui, 能写备注的
Felldeadbird

Felldeadbird      11 小时 35 分钟前

临时放代码用的。有时候要拉新同步别人代码。

刚用 git 时经常用,后面我习惯了 commit 到本地一个临时分支。因为有时候忘记了 stash
wangsongyan

wangsongyan      11 小时 21 分钟前 via iPhone

不知道是不是我仓库的原因,每次 git stash save/pop 时都很慢😓
liuhuan475

liuhuan475      10 小时 28 分钟前

切分支用的吧
koala9527

koala9527      10 小时 26 分钟前

紧急处理线上 BUG ,最近才学会,切分支还是有点麻烦。stash 还是方便些。
zhuzhibin

zhuzhibin      10 小时 24 分钟前

Rache1

Rache1      10 小时 11 分钟前

@molvqingtai 可以写,跟 commit 一样,加 m 参数
hello2090

hello2090      9 小时 58 分钟前

@creanme stash pop 是扔掉那个 stash 吧 你应该用 stash apply?
hello2090

hello2090      9 小时 56 分钟前

@molvqingtai git stash save ‘comment‘
Gota

Gota      9 小时 35 分钟前

用 Intellij 的话也可以试试它的 Shelve/Unshelve, 同样的效果但不依赖于特定 VCS.
simonlu9

simonlu9      9 小时 21 分钟前

还是太麻烦啦,频繁切换分支,试试 worktree 吧
wonderfulcxm

wonderfulcxm      9 小时 20 分钟前 via iPhone

我也没用,直接 commit 到新的分支。stash 后如果做了修改,再切回来有点奇怪。还不如处理两个 commit 的冲突。
molvqingtai

molvqingtai      8 小时 28 分钟前

经常用,但是有个问题 stash 不能写
@Rache1 #36
@hello2090 #38
感谢,又学到了
kwrush

kwrush      7 小时 50 分钟前 via iPhone

我主要是同步主分支临时保存下,还有临时去修 bug 保存一下当前进度。commit 会跑一遍 git hook ,一是慢,二是代码没写好只能忽略错误
creanme

creanme      7 小时 46 分钟前

@hello2090 应该都可以吧,apply 不会动 stash 里面保存的,而 pop 是删除 stash 里面保存的,应用到现在目录。
Slurp

Slurp      7 小时 41 分钟前

我又来宣传 gupa 了:
> where gupa
gupav: aliased to git pull --rebase --autostash

从远程这样拉的话,能够避免额外的 merge 。--autostash 选项相当于 在 git pull --rebase 之前 git stash ,之后 git pop 。
jobmailcn

jobmailcn      7 小时 9 分钟前 via Android

个人觉得不如 commit 好用,stash 后 merge 了其他提交,再 pop 的时候很容易冲突,解决冲突后还得单独 drop 掉,不然后面容易忘了 stash 究竟有没有合并,是哪个分支的。用 commit 就不会有这些问题,临时提交可以用 reset 还原成修改态
Roojay

Roojay      6 小时 41 分钟前 via Android

使用 git-svn 的时候,这个就是神器。本地 git commit 完成之后 git svn dcommit 推送到 svn 仓库之前使用缓存不需要提交的文件
hello2090

hello2090      6 小时 24 分钟前

@creanme 哦 那有可能,我一般不 pop, 丢掉是肯定的,从名字就可以看出来,不过确实有可能会 apply 上去。
ooops

ooops      6 小时 11 分钟前

是这样,你可以先记着有这个功能。等你有场景时能就会用到了。
DamonLin

DamonLin      6 小时 3 分钟前

我自己用的频率很高
lysS

lysS      5 小时 39 分钟前

我一般新拉一个。话说这算 git 的缺陷把,为什么不能自动 stash?
yoa1q7y

yoa1q7y      4 小时 13 分钟前

还有个用法,刚写了几行,不想提交,但是又想下班,可以把改动导出成一个 patch ,拿回家继续搞

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

把 Stash0.patch 这个文件放到网盘或者 U 盘
darknoll

darknoll      2 小时 27 分钟前 via Android


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK