大家的 git log 看起来也是这么乱吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
/div>
cxq
V2EX    git

大家的 git log 看起来也是这么乱吗?

  •  2
     
  •   cxq 2015-08-21 19:34:38 +08:00 8910 次点击
    这是一个创建于 3709 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在团队里面普及 GIt , 但是人比较多。感觉 git log 看起来有点乱

    我们的 git log 看起来是这样



    是不是应该是这样?




    另外一个问题,合并冲突的 merge branch 应该 push 吗?

    合并不是发生在本地吗, 那自动 merge 需不需要被 push ?
    27 条回复    2015-08-22 14:24:46 +08:00
    lightening
        1
    lightening  
       2015-08-21 19:37:25 +08:00
    你们的工作流程是怎么样的?有多少人?每个人是开自己的 branch 还是在 master 上工作?
    cxq
        2
    cxq  
    OP
       2015-08-21 19:38:42 +08:00
    @lightening 在 master 上工作的, 每个人改完直接 push 上 master.
    xiaket
        3
    xiaket  
       2015-08-21 19:40:29 +08:00
    要科普 rebase
    47jm9ozp
        4
    47jm9ozp  
       2015-08-21 19:41:00 +08:00
    git merge --no-ff
    lightening
        5
    lightening  
       2015-08-21 19:41:32 +08:00   2
    @cxq 那如果没有冲突,图形看起来应该是很漂亮的直线。如果有冲突,可以: git pull --rebase
    把自己开发的新功能 rebase 到最新的 master 上,然后再 push 上去,应该是一条直线。
    cxq
        6
    cxq  
    OP
       2015-08-21 19:50:43 +08:00
    @lightening 好的 谢谢
    wuming2015
        7
    wuming2015  
       2015-08-21 19:52:07 +08:00
    假如有个分支叫 branch-new,在该分支完成后 git checkout master (切换到主分支),然后在本地合并分支( git merge branch-new ),就会自动合并了,遇到冲突不能自动合并的话,由每个程序员手动合并,合并后再 push 到远程仓库就可以了
    至于合并冲突的 merge branch 和自动 merge 需不需要 push 要看你自己的情况而定了,合并冲突后,你本地代码库就是最新的啦,一般来说是在远程库之前的,如果需要,可以直接 push 上去的,也可以继续开发,只你你在开分支的时候已经 git pull 过就行
    cxq
        8
    cxq  
    OP
       2015-08-21 19:54:22 +08:00
    @lightening @xiaket rebase 我一直只知道用, 把某个我不想要的 commit 删除。 或者 rebase master.但是不知道原理是什么一直。
    zealot0630
        9
    zealot0630  
       2015-08-21 20:06:26 +08:00
    随便贴一点

    * f3bd2f1
    |\
    | * 63ca407
    | * 3994ded
    | * e193935
    | * 1f0b882
    | * e3806c0
    * | fdd5ee1
    * | cce0862
    * | d6c944
    |\ \
    | |/
    |/|
    | * e9eed5b
    | | * 79cfe4
    | |/
    |/|
    * | f46b8c
    |\ \
    | * | e74f1f
    * | | 739cdd
    * | | e263
    |\ \ \
    | * | | 2b71
    * | | | 45
    |\ \ \ \
    | * | | | 6e
    | | |/ /
    | |/| |
    * | | | e2
    |\ \ \ \
    | |_|_|/
    |/| | |
    | * | | 3d1c
    | |/ /
    * | | efded6
    * | | b48790
    |/ /
    * | 8f2dd1
    |\ \
    | * | ebcb48
    * | | 3cd51e
    |/ /
    * | faa78a1
    * | 73a731
    |\ \
    | * | a16531
    * | | 1feb
    |\ \ \
    | |/ /
    :
    ljbha007
        10
    ljbha007  
       2015-08-21 20:27:01 +08:00
    人多就专门一个人负责用服务器来 pull 其他人的代码 然后合并
    lightening
        11
    lightening  
       2015-08-21 21:48:20 +08:00
    @cxq Rebase 就是把你每个 commit 的 diff 取出来,再一个个 patch 到新的 branch 上。
    在你的情况下,就是把你在旧 master 上的 commit 一个个取 diff ,然后再 一个个 patch 到新的 master 上。
    cxq
        12
    cxq  
    OP
       2015-08-21 22:29:23 +08:00
    @lightening 原来是这样, 我之前这么手动做过, 真是太傻啦现在想起来 哈哈哈
    yangmls
        13
    yangmls  
       2015-08-21 22:39:12 +08:00
    应该普及 git merge --squash git cherry-pick 和 git rebase 的用法。。。
    huawuya
        14
    huawuya  
       2015-08-21 22:46:29 +08:00
    我们也刚换 Git ,比你这个还乱,解决方法就是 5 楼的 pull rebase ,打算等大家对 git 都比较熟了,再让他们用 rebase ,免得出问题。
    kisnows
        15
    kisnows  
       2015-08-21 22:48:34 +08:00
    @cxq 每个人都直接到 master 上太恐怖了 ba
    xavierchow
        16
    xavierchow  
       2015-08-21 23:50:50 +08:00   4
    > 在 master 上工作的, 每个人改完直接 push 上 master.

    先不论这个工作流程需要改善的地方(利用分支,或者采用 pull request 等等),
    并不是 git log 是线性的就是好的,这个是 case by case 的。

    原则:
    需要追踪或者保持历史上下文( historical context )的场合下,用 git merge,
    反之,**可以**使用 git rebase 来清理 log 来保持线性整洁。
    :此处用“可以”而不是“必须”是因为使用 git rebase 有一个黄金原则:
    由于 git rebase 改变了 branch 的 history ,永远不要在别的开发伙伴可以 fetch 或准备 fetch 的 branch 上作 rebase.

    具体能使用 rebase 的场景有:
    1.没 push 之前,你可以在你的 feature branch 上针对 master 作 rebase 以获取别人在 master 上的修改并保持你的历史整洁。
    2.pull request 被 review 过后,决定要 merge 到 master 之前,可以通过 rebase 整理历史。(因为这个分支一旦被合并将会被删掉,不存在别的开发者再 fetch 它的情况)

    参考:
    http://stackoverflow.com/questions/804115/when-do-you-use-git-rebase-instead-of-git-merge
    https://www.atlassian.com/git/tutorials/merging-vs-rebasing/conceptual-overview
    https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase/

    PS: 关于 rebase 的原理 http://git-scm.com/docs/git-rebase 已经讲的很清楚了,花点时间去看看,理解概念胜过硬记流程,磨刀不误砍柴功,不是么?
    hilenlai
        17
    hilenlai  
       2015-08-21 23:57:22 +08:00
    happywowwow
        18
    happywowwow  
       2015-08-22 00:02:27 +08:00
    rebase -i squash 多个 commit 为一个 commit
    然后 cherry-pick 到 dev 分支
    测试过了 再合并为一个 cherry-pick 到 master
    leefly
        19
    leefly  
       2015-08-22 00:09:57 +08:00
    团队协作开发 你需要的是 Git FLow [A successful Git branching model]( http://nvie.com/posts/a-successful-git-branching-model/)
    cxq
        20
    cxq  
    OP
       2015-08-22 01:35:28 +08:00
    @leefly @hilenlai 谢谢,之前都是两三个人用,没什么感觉, 团队多人以后真要每个人都认真学习一下 git flow

    @happywowwow 恩,言简意赅, 感觉最适合先采用这种流程。 谢谢

    @xavierchow 太有用了,谢谢。提到用到 pull request, 其实我之前有这么想过,主要想用来在 merge 时用审核代码, 但是好像只有 github 上可以 fork 吧?

    @kisnows 是啊 之前没考虑太多, 之后还是要改过来。

    @lightening 这个我之前做过类似的。前一段时间的一个项目,为了维持线性,我是让其他人都打 patch 给我,我来审核,再做 push 。但这样负责合并的人会非常累。我已经多次在地铁和公交车上做合并,然后 push 了。哎 真是心酸。

    @zealot0630 看了半天,隐隐约约觉得有点意思,但是最后还是没看懂啊
    lightening
        21
    lightening  
       2015-08-22 02:32:47 +08:00
    @cxq 那就好好学一下 git flow 吧,找个托管网站(GitHub, GitCafe, etc ),用 pull request 的方法会很方便。
    听说遥远的 SVN 时代,有种职位叫 SVN 管理员……
    hslx111
        22
    hslx111  
       2015-08-22 08:22:19 +08:00
    第一张图是 git ,第二张是 svn
    cxq
        23
    cxq  
    OP
       2015-08-22 08:28:58 +08:00 via Android
    @lightening 嗯 之前没研究过 pull request 上午看了下 . bitbucket 也可以用 准备做下实验最近用起来. 感觉前一段时间 我一直在做 git 管理员 主要是团队里的其他人都不懂. 还都只会 push pull 。 要花时间普及
    huoshanhui
        24
    huoshanhui  
       2015-08-22 09:02:02 +08:00
    你需要 了解 rebase
    com314159
        25
    com314159  
       2015-08-22 09:59:52 +08:00
    pull 的时候选择 rebase, 感觉你们没有使用 rebase 的原因
    lilydjwg
        26
    lilydjwg  
       2015-08-22 11:47:00 +08:00
    不觉得乱啊。
    wayslog
        27
    wayslog  
       2015-08-22 14:24:46 +08:00   1
    论 rebase 的重要性……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4682 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 01:06 PVG 09:06 LAX 18:06 JFK 21:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86