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

你们 git stash 用的多么

  •  
  •   v2byy · 2018-07-31 09:22:48 +08:00 · 6306 次点击
    这是一个创建于 469 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    等修复完切回 dev 分支
    patch < current.patch
        16
    randyzhao   2018-07-31 12:01:32 +08:00
    我都是先 commit -am 先
    再回来的时候 reset --soft HEAD^
        17
    TabGre   2018-07-31 12:02:18 +08:00 via iPhone
    @hicdn 这个 patch 是 git 的命令吗?
        18
    xmadi   2018-07-31 12:05:30 +08:00 via iPhone
    先 commit 切到另外一个分支改 改完再切回来 reset 到之前的已经上
        19
    falcon05   2018-07-31 12:10:26 +08:00
    还是开个分支吧
        20
    hicdn   2018-07-31 13:26:37 +08:00
    @TabGre linux 系统命令
        21
    hicdn   2018-07-31 13:31:42 +08:00
    @TabGre 用 git apply current.patch 也可以
        22
    ylsc633   2018-07-31 13:39:41 +08:00
    为了避免出现问题!

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

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

    回答一下你的“不然”
    先 commit
    再 pull --rebase 并处理冲突
    再 reset --soft
        41
    renothing   2018-07-31 23:06:21 +08:00
    先 commit,后面切回去继续改了后--amend 追加提交。
        42
    leafiy   2018-07-31 23:14:45 +08:00
    amend 正解
        43
    johnnie502   2018-07-31 23:25:15 +08:00
    直接 commit 一个 temp,那边弄完以后回来再 reset HEAD~1
        44
    tomato3   2018-07-31 23:51:23 +08:00
    ```
    git stash -k
    git pull
    git stash pop
    ```
        45
    twistedmeadows   2018-08-01 00:59:06 +08:00 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   2018-08-01 01:59:35 +08:00 via Android
    我都是每次 stash 的时候加上描述信息和时间信息,还原环境的时候就使用 apply,不用 pop。
        47
    weixiangzhe   2018-08-01 02:16:08 +08:00 via iPhone   ♥ 1
    建议 git work tree
        48
    msg7086   2018-08-01 05:05:42 +08:00
    Git 的优势就在于 Commit 和 Branch 都是免费的。Stash 我只有在马上要恢复 Working Directory 的时候,比如 Stash+Pull+StashPop 的组合命令,才会用 Stash。其他的时候有 Commit 为啥要用实现相同但更难用的 Stash 呢。

    Feature branch 和 WIP commit 都是好东西。
        49
    houskii   2018-08-01 11:37:43 +08:00
    commit 和 amend 都有 reflog 可以挽救,stash 如果误 pop 或者删了就很蛋疼了

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