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 · 5063 次点击
    这是一个创建于 1974 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我每次开发的时候用的 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   ·   实用小工具   ·   3137 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:52 · PVG 12:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.