V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jianghu52
V2EX  ›  程序员

用git还有一个好处,多次的激励自己

  •  
  •   jianghu52 · 2013-09-12 17:24:52 +08:00 · 6418 次点击
    这是一个创建于 4075 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前听人说,用git有一个潜在的好处,可以慢慢的改变一个人的开发习惯,快速的小部分的迭代。把一个大的功能慢慢分解到一个个小的模块,一点一点的完成。现在终于有点感觉了。
    接了一个很麻烦的任务,给了3个人/月。就我一个人在搞。现在就是一点一点的啃,慢慢的一个一个的解决。
    每次完成一个很微小的功能,或者验证了某个写法是正确的,就git一次。心里非常的有底,哪怕失败了,代码被我改的稀烂,没问题,直接del掉,clone一个上个版本。
    再一个本来心里觉得根本不能完成的东西,一点一点的分解,然后一点一点的实现。每git一次就是证明了自己前进了一步。这种感觉真好。
    31 条回复    1970-01-01 08:00:00 +08:00
    sethverlo
        1
    sethverlo  
       2013-09-12 17:27:36 +08:00
    lz 这句「直接del掉,clone一个上个版本」。。。

    你可以 git log 看版本然后 git checkout 过去;

    也可以 git reset --hard xxx。。。
    agassi_yzh
        2
    agassi_yzh  
       2013-09-12 17:32:27 +08:00
    楼上正解
    zhao
        3
    zhao  
       2013-09-12 17:32:39 +08:00
    楼主也可以用分支
    git checkout -b new_branch
    如果满意,提交之后,可以合并到master
    git checkout master
    git merge new_branch
    如果不满意,提交之后删掉分支也可以
    git checkout master
    git branch -D new_branch
    weakish
        4
    weakish  
       2013-09-12 17:39:33 +08:00
    妳这几乎任何一个VCS都可以做到,git的妙处是分支啊。

    推荐 git flow 这个扩展,分支更方便。
    gaicitadie
        5
    gaicitadie  
       2013-09-12 18:28:58 +08:00
    原来大家都用分支啊,原来我自己用分支都不好意思说的,怕别人说我菜,我用脚本做了一个自动给分支命名的功能,按当前时间命名,下面是截图

    晕,不能截图,发文字吧:

    gc@gc:~/mysite$ git branch
    2013-07-24_16_51
    2013-07-26_14_43_21
    2013-07-29_15_33_38
    2013-07-29_16_23_02
    2013-07-29_16_26_09
    2013-07-29_16_26_43
    2013-07-30_12_53_45
    2013-07-30_13_25_51
    2013-07-30_13_45_29
    2013-07-30_13_47_33
    2013-07-30_18_08_10
    2013-07-30_20_35_40
    2013-08-07_18_13_20
    2013-08-08_09_32_00
    2013-08-22_17_23_32
    2013-08-27_16_47_38
    2013-08-27_17_02_31
    2013-08-27_17_02_45
    2013-08-27_17_19_12
    2013-09-10_10_38_43
    2013-09-10_15_39_18
    * master
    edward1992
        6
    edward1992  
       2013-09-12 20:06:49 +08:00
    分支可是git的绝杀啊
    guangwong
        7
    guangwong  
       2013-09-13 00:22:18 +08:00
    一個人開發,分你妹的支
    luikore
        8
    luikore  
       2013-09-13 00:27:53 +08:00
    @guangwong 譬如做比较大的多次修改的时候
    arron
        9
    arron  
       2013-09-13 00:32:27 +08:00
    @gaicitadie 你这个用分支来看历史就不用了吧,直接看log就可以checkout出历史代码...
    lightening
        10
    lightening  
       2013-09-13 00:39:24 +08:00
    @gaicitadie 分支不是这样用的……
    修改历史,git log一下,拷贝版本号,checkout出来就行,完全没必要分支。
    AnyOfYou
        11
    AnyOfYou  
       2013-09-13 00:40:14 +08:00 via Android
    @gaicitadie 分支不应该用这种时间命名吧,失去了分支的意义。
    julyclyde
        12
    julyclyde  
       2013-09-13 10:20:30 +08:00
    @sethverlo 这样本地会残留一个dangling commit的。过几十天再git fsck才能删除
    sethverlo
        13
    sethverlo  
       2013-09-13 10:50:31 +08:00
    @julyclyde reset 我记得好像不会?git checkout 的话感觉更多就是为了看一下前一个版本是什么样子的(比如说刚才手贱删了样例代码结果自己不会写233。。
    julyclyde
        14
    julyclyde  
       2013-09-13 14:24:35 +08:00   ❤️ 1
    @sethverlo reset我不确定,没研究过;checkout古代版本是必然会dangling的,除非你能记住the latest commit hash再重新commit到最新,否则从checkout古代版本那一刻开始往后的就都找不到了。commit的指针是指向parent的,而不是指向child的,原理早就了现象
    holy_sin
        15
    holy_sin  
       2013-09-13 14:37:43 +08:00
    分享一个宏 lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %C(blue)%s%Creset %C(dim cyan)<%an>%Creset %C(dim white)(%ci)%Creset' --abbrev-commit

    git lg 比较好看
    RainFlying
        16
    RainFlying  
       2013-09-13 14:42:35 +08:00
    心里非常的有底,哪怕失败了,代码被我改的稀烂,没问题,直接del掉,clone一个上个版本。

    说得 SVN 不能一样的。
    SVN 还可以只 checkout 出某一个目录,或者某个特定的文件。
    如果用 Git。。。
    你试试 git clone 一下 Linux 的 Kernel source 。。。
    sethverlo
        17
    sethverlo  
       2013-09-13 16:28:23 +08:00
    @julyclyde 其实我没看明白。。我刚做了个实验,不知道是不是您的意思?求详情?

    > git log

    commit 4fd52040a1945c5b46697b124b2c48993bd309c9
    commit 45b8fc798b1670fbe67de6be436ec000f9c50a12
    commit e6de0b4e5e2744f9f57376ef0cacf0636fc16e0a

    > git checkout e4531c0dca230e8e4299848f96faf1c100d665ce

    Note: checking out 'e4531c0dca230e8e4299848f96faf1c100d665ce'.

    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.

    HEAD is now at e4531c0... create.html.erb deleted.

    > git checkout product

    Previous HEAD position was e4531c0... create.html.erb deleted.
    Switched to branch 'product'

    > git log

    commit 4fd52040a1945c5b46697b124b2c48993bd309c9
    commit 45b8fc798b1670fbe67de6be436ec000f9c50a12
    commit e6de0b4e5e2744f9f57376ef0cacf0636fc16e0a
    sethverlo
        18
    sethverlo  
       2013-09-13 16:29:58 +08:00
    @julyclyde oops..刚才觉得信息太长删掉了一部分,补充一下,我 checkout 到的是第五条 commit。。我只写了三条。。
    julyclyde
        19
    julyclyde  
       2013-09-13 16:41:01 +08:00   ❤️ 1
    你有product这个branch name指向4fd52 所以还能找回来
    如果没这个名字的话,你checkout到45b8或者e6de之后就回不来了
    mengzhuo
        20
    mengzhuo  
       2013-09-13 16:44:07 +08:00
    看branch下面这两个才是神器
    tig gitg
    sethverlo
        21
    sethverlo  
       2013-09-13 16:49:32 +08:00
    @julyclyde 这样啊。。好像明白了。。可是用 sourcetree 什么的看不到么?
    gaicitadie
        22
    gaicitadie  
       2013-09-13 17:37:46 +08:00
    @arron
    @lightening
    @AnyOfYou
    谢谢,涨姿势了
    julyclyde
        23
    julyclyde  
       2013-09-13 17:53:03 +08:00
    @sethverlo 我刚才说过了啊,指针是指向历史的,而不是指向未来的。如果某个commit没有branch name、tag、HEAD指向,且比当前HEAD更新,就是正常手段访问不到的。可以用git-fsck找到
    cloudzhou
        24
    cloudzhou  
       2013-09-13 17:59:25 +08:00
    @gaicitadie 使用自动脚本生成分支这个没有意义吧,我使用脚本就能自动给你列出log的每天commit,你这是抢了版本控制的功能啊
    sethverlo
        25
    sethverlo  
       2013-09-13 18:04:10 +08:00
    @julyclyde 但是这个东西没有消失啊,使用第三方工具都可以查到的。。只不过 git log 确实是消失了。。。
    julyclyde
        26
    julyclyde  
       2013-09-13 18:06:16 +08:00   ❤️ 1
    @sethverlo 有个有效期,过期之后不知道是自动删除还是fsck删除
    sethverlo
        27
    sethverlo  
       2013-09-13 18:14:01 +08:00
    @julyclyde Thanks. 居然还能这样。。。
    gaicitadie
        28
    gaicitadie  
       2013-09-13 18:15:56 +08:00
    @cloudzhou 谢谢指教,涨姿势了,刚才试了试,生成分支确实多此一举,需要的时候每个log都可以生成一个分支的
    teloon
        29
    teloon  
       2013-09-14 17:19:56 +08:00
    @julyclyde @sethverlo 不是吧,应该不会自动删除的,而且fsck反而能列出所有dangling的commits,另一个简便的方法是用git reflog
    julyclyde
        30
    julyclyde  
       2013-09-14 19:21:38 +08:00
    @teloon 有个有效期的东西可以设置。具体情况我记不清了。fsck是可以列出的。reflog我不懂
    myoula
        31
    myoula  
       2013-09-14 20:15:15 +08:00
    mark一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1823 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.