为什么我在自己的 merge request 中可以看到其他人的 commit - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
Weixiao0725
V2EX    git

为什么我在自己的 merge request 中可以看到其他人的 commit

  •  
  •   Weixiao0725 2019-07-18 11:39:36 +08:00 5459 次点击
    这是一个创建于 2350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我每次开发的时候用的 git 命令流程如下:

    1. git checkout master
    2. git fetch origin master
    3. git merge origin/master
    4. git checkout -b my_dev
    5. coding....
    6. git commit -am "finished feature"
    7. git push origin my_dev:my_dev

    可是,这样做的话我居然可以在自己的 merge request 中看到别人的 commit。但是如果我改用git pull 来同步代码的话,然后再 coding,然后推到远端,就只会看到我自己的 commit。按照我的理解,git pull 不是等于 git fetch && git merge 吗,为什么会有这么大的区别呢?希望理解的老铁解答下,多谢,多谢!

    ps:我们公司使用的 gitlab,在 GitHub 中应该叫 pull request 好像。

    7 条回复    2019-09-15 15:10:03 +08:00
    siteshen
        1
    siteshen  
       2019-07-18 12:59:43 +08:00
    执行 `git merge origin/master` 后,master 中的新代码就到你的分支了,你可以用 `git log` 在你的分支下看看 commit 历史来确认这一点( git difif origin/master 应该也能看到其他 commit 的代码)。

    我用的方案是(注意,因为 rebase 会改变 commit 历史,所以只适用没有共享分支的情况):

    git fetch
    git checkout feature/impl-login
    git rebase origin/master
    # git push origin -f feature/impl-login # 警告请搞清楚 -f 的含义再使用

    然后 `git log` 查看,就只有自己的 commit,冲突(如果有)在 rebase 过程中解决。
    airect
        2
    airect  
       2019-07-18 14:39:36 +08:00
    因为目标分支未包含别人的 commit,而你的包含了
    Weixiao0725
        3
    Weixiao0725  
    OP
       2019-07-18 15:08:42 +08:00
    @airect 应该不是,因为我在 Changes 里只能看我的文件改变,看不到其他人的。
    wuchujie
        4
    wuchujie  
       2019-07-18 16:45:33 +08:00
    @siteshen 请叫一下
    wuchujie
        5
    wuchujie  
       2019-07-18 16:49:58 +08:00
    @siteshen 请教一下 比如我线上本身我线上分支是
    线上 master 比如 commit 记录是 20190718

    在此基础上 我在本地开新分支 feature-A 然后开发[推测试服务器部署] push 到 git

    线上 feature-A 的 commit 记录是 20190719

    线上 master 现在有个修改 commit 记录是
    20190720
    20190718

    现在 feature-A 还有办法 rebase 吗
    siteshen
        6
    siteshen  
       2019-07-18 19:34:58 +08:00
    @wuchujie 只要没有未 commit 的代码,rebase 随时都可以执行的,过程如下:

    git fetch # 保证本地有远端的 master 代码
    git checkout feature-A
    git rebase origin/master


    rebase 成功后,`git log` 的结果应该是这样:

    20190719
    20190720
    20190718


    另外,建议对 git 不那么熟悉的同学,在测试时可以复制所有目录(和文件),在副本中测试。这样即使操作失败了,也不会有什么影响。另外一个建议是,遇到出现不太确定的情况时,尽早找熟悉 Git 的同事查看。
    hantsy
        7
    hantsy  
       2019-09-15 15:10:03 +08:00
    个人只喜欢 Merge,不用 Rebase。

    Merge 可以保留整个 Git 最原始的提交的树形结构。Rebase 将这种结构修改了,拉直了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     932 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:03 PVG 04:03 LAX 12:03 JFK 15:03
    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