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

你们 git stash 用的多么

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

    以前使用 svn 的时候,每个 branch 都在本地有一份代码,这样方便在切换分支,在一个分支加 feature,可以很方便的在另外的分支上修 bug。

    后来使用 git 之后,默认所有 branch 都位于在一份 copy 中,有的时候临时要切个分支,但有不想提交的时候,只能用 git stash 来暂存下改动。问题是这样很麻烦,有的时候 add 了新文件忘记 stage,git stash pop 出来有问题。

    当然也可以使用 git 来 checkout 不同分支,不同 copy。

    大家是怎么做的呢?

    51 回复  |  直到 2018-08-01 14:10:43 +08:00
        1
    sagaxu   206 天前 via Android   ♥ 11
        2
    HongJay   206 天前
    我也是 svn 转的。。同样有这个问题
        3
    reus   206 天前
    ……你直接把目录复制一份,不就是另一份代码了
        4
    bjfane   206 天前
    svn 是纯 copy 型分支,git 是指针型分支
    手头的非常不完整,不想 commit,那 stash 没问题,而且 查看 stash list 也能看是在哪个分支上的,也有命令看差异,
    如果是因为 新文件不习惯的话,可以尝试 commit,大不了 合并 commit 了 ,总的来说比 stash 更麻烦
        5
    xianyu0   206 天前   ♥ 8
    git stash -u // 可以把未跟踪的文件也加入 stash
        6
    liuzhedash   206 天前   ♥ 1
    @reus #3
    文件比较多的项目,复制一次很麻烦的,如果有 node_modules 目录就更尴尬了
        7
    ahmcsxcc   206 天前
    同样有这个问题
        8
    newtype0092   206 天前
    stash 不应该是一个常用的功能,如果你频繁的在没有完成当前提交的情况下切换分支,说明你的工作流有问题吧,这里一脚那里一脚有什么效率可言啊。
    自己一般来说最多两个 stash,再多可能都忘了之前在干嘛了,还不如删了重新写。
        9
    linuxchild   206 天前
    考虑一下 git flow ?
        10
    ttyant   206 天前 via Android
    来回倒版本的不是好程序员,git 不是为你而生
        11
    beny2mor   206 天前   ♥ 1
    我用的不多,一般切换前先 commit,切换回来后可以使 git commit --amend 合并
        12
    woshifyz   206 天前
    一般都可以 commit,然后用 rebase 操作下就好了,核心是你要从概念上转过来,操作起来就如鱼得水
        13
    Biwood   206 天前
    执行 git stash 之前怎么着都得先 git add 一下吧,这样可以防止漏掉新文件,这是操作习惯的问题。

    PS:楼主头像来自风骚律师,我也挺喜欢这部剧的镜头美感。
        14
    rockyou12   206 天前
    我也觉得 commit 算了,stash 挺容易搞错的,即便你不 rebase 最多就 commit 日志难看一点
        15
    hicdn   206 天前
    我一般是要做 hotfix 时,先在 dev 分支
    git diff > current.patch
    git reset --hard

    等修复完切回 dev 分支
    patch < current.patch
        16
    randyzhao   206 天前
    我都是先 commit -am 先
    再回来的时候 reset --soft HEAD^
        17
    TabGre   206 天前 via iPhone
    @hicdn 这个 patch 是 git 的命令吗?
        18
    xmadi   206 天前 via iPhone
    先 commit 切到另外一个分支改 改完再切回来 reset 到之前的已经上
        19
    falcon05   206 天前
    还是开个分支吧
        20
    hicdn   206 天前
    @TabGre linux 系统命令
        21
    hicdn   206 天前
    @TabGre 用 git apply current.patch 也可以
        22
    ylsc633   206 天前
    为了避免出现问题!

    要临时切换分支 我一般先 commit 然后直接切换分支,这样代码不会上传,切回来也不会出错!

    不好的地方 就是 commit 不太好看...
        23
    dobelee   206 天前 via Android
    几乎每一次提交都在用。不过是 gui 自动完成的。
        24
    RyougiShiki   206 天前
    pycharm 自带的 gui 工具每次 pull 时都用,虽然没理解它的作用
        25
    ptrees   206 天前
    不用 stash,太容易出错,都是直接 commit
        26
    AscenZ   206 天前
    一般直接 commit,之后再 rebase 合并 commit 或者用 commit --amend
        27
    drackzy   205 天前
    我一般 Jetbrain 系的 IDE 开两个,项目复制成2个分别打开。要不分支切不过来。一个开发分支用,一个用于临时随便分支。
        28
    wjpdev   205 天前
    IDEA 下方 Local Changes 文件右键 Shelve changes 可以解决这个问题。
        29
    hqdmy   205 天前
    经常 stash
        30
    daemonghost   205 天前
    ```
    > git stash --include-untracked # 将新添加的文件也暂存起来
    > git checkout -b new_branch
    ```
        31
    tyrealgray   205 天前 via Android
    经常用
        32
    focux   205 天前
    每次提交前必用,不然怎么把 remote 端的代码 pull 下来。
        33
    ShineSmile   205 天前
    很好用,经常用。
        34
    ai277014717   205 天前
    用的多,GUI 很好用
        35
    thinker3   205 天前
    面试题之一
        36
    icylogic   205 天前 via iPhone
    其实在服务器的 gitlab 上看就挺好的。。。本地主要还是需要修改和调试。
        37
    du5t6reak   205 天前
    用啊,不过还原的时候不要用 git stash pop 这个如果有冲突的话,stash 的代码是不会保存的。
    用 git stash apply stash@{}
        38
    MrBearin   205 天前
    偶尔
        39
    tonyzzp   205 天前 via Android
    我一般是在更新代码的时候,如果和我本地修改有冲突,但我目前又不想提交我的代码,这时我会用 stash 然后 pull,再 stash pop 继续 写代码。
        40
    randyzhao   205 天前
    @focux #32

    回答一下你的“不然”
    先 commit
    再 pull --rebase 并处理冲突
    再 reset --soft
        41
    renothing   205 天前
    先 commit,后面切回去继续改了后--amend 追加提交。
        42
    leafiy   205 天前
    amend 正解
        43
    johnnie502   205 天前
    直接 commit 一个 temp,那边弄完以后回来再 reset HEAD~1
        44
    tomato3   205 天前
    ```
    git stash -k
    git pull
    git stash pop
    ```
        45
    twistedmeadows   205 天前 via Android   ♥ 1
    可能你需要再多了解下 reset 和 rebase 那些操作的细节。
    例如 reset --hard、reset --soft

    我不怎么用 stash,要临时切 branch 的时候都是先顺手 commit -a。这种 commit 我不会认真地写内容,只填 tmp save 之类的,下次切回来就知道当前 commit 只是这个 branch 下的临时存档。
    等到当前 branch 上工作做完的时候,再 reset 回上一个正式的 commit 点,然后重新填写提交。

    这样每个 branch 完成开发的时候都是整洁的,确保每次 commit 都是一次逻辑上独立的改动的话,还可以方便地回退和 cherry-pick。在开发过程中又足够敏捷,可以同时有多个 branch 处于施工状态——不过我在开太多 branch 时会主动意识到当前这个状态是很差的,会跟 leader 沟通工作分配的问题。


    小心得就是:commit 是无痛的,可以积极使用 commit。
    甚至,在 git 里除了 hard reset 这种破坏性操作,大多数操作都是可逆和无痛的。
        46
    zhilincom   205 天前 via Android
    我都是每次 stash 的时候加上描述信息和时间信息,还原环境的时候就使用 apply,不用 pop。
        47
    weixiangzhe   205 天前 via iPhone   ♥ 1
    建议 git work tree
        48
    msg7086   205 天前
    Git 的优势就在于 Commit 和 Branch 都是免费的。Stash 我只有在马上要恢复 Working Directory 的时候,比如 Stash+Pull+StashPop 的组合命令,才会用 Stash。其他的时候有 Commit 为啥要用实现相同但更难用的 Stash 呢。

    Feature branch 和 WIP commit 都是好东西。
        49
    houskii   205 天前
    commit 和 amend 都有 reflog 可以挽救,stash 如果误 pop 或者删了就很蛋疼了

    好吧,其实还是因为我之前有一次从 A 切到 B 然后 stash 了,在 B 开发了很久切回 A 的时候已经忘记了 stash pop 这回事,导致又重新开发了一遍,然后开发快结束了才想起来,从此就不用 stash 了。。。
        50
    tt67wq   205 天前
    无情资本家拿人当畜生使,一个人好多个任务并行,经常要 stash 切其他分支
        51
    kuro1   205 天前
    =。= 一个人同时处理好几个 branch...
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4160 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 06:19 · PVG 14:19 · LAX 22:19 · JFK 01:19
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1