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

如果本地分支是新开的分支,怎么才能拿到此次 push 的 diff 呢

  •  
  •   az09py · 2018-09-09 10:51:49 +08:00 · 2935 次点击
    这是一个创建于 2266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    取 push 时,我用的 git diff origin/${branch} HEAD 但是只能去远程分支存在的情况,如果分支是新开的,且要在 push 前的 hook 里拿到 diff,有木有什么命令

    另外有没有什么命令能判断一个远程分支是否存在

    第 1 条附言  ·  2018-09-09 11:28:49 +08:00
    git branch -vv 可以,但是不知道有没有更简单的,直接查看某个分支及其远程分支的状态

    或者能不能拿到新分支是从哪个分支检出的呢
    21 条回复    2018-09-11 11:56:48 +08:00
    sagaxu
        1
    sagaxu  
       2018-09-09 12:00:47 +08:00 via Android
    HEAD^
    az09py
        2
    az09py  
    OP
       2018-09-09 12:27:07 +08:00
    @sagaxu 如果 push 前有多次提交,HEAD^就不行
    sagaxu
        3
    sagaxu  
       2018-09-09 12:55:11 +08:00 via Android   ❤️ 1
    git log branch_name --graph
    wd
        4
    wd  
       2018-09-09 13:12:46 +08:00 via iPhone
    没明白 新开的分支和哪里的 diff ?
    az09py
        5
    az09py  
    OP
       2018-09-09 13:19:26 +08:00
    @wd 新检出的分支,可能有 n 次 commit 还没有提交,push 前查看这次 push 前所有未提交 commit 的 diff
    helloSpringBoot
        6
    helloSpringBoot  
       2018-09-09 13:26:35 +08:00 via Android
    diff 后面可以接 commit 吧
    wd
        7
    wd  
       2018-09-09 16:24:55 +08:00   ❤️ 1
    @az09py 实际上 git 本地和远端的分支可以不同名的,比如本地的 dev 分支可以往远端的 master 分支 push。所以你得说清楚新检出的和远端的什么分支比较,如果是远端的同名分支,那也有可能远端还没有这个分支,那 diff 显示什么呢?
    kaneg
        8
    kaneg  
       2018-09-09 16:37:12 +08:00 via iPhone
    git log <local branch>..<remote branch>
    例如:git log master..origin/master
    az09py
        9
    az09py  
    OP
       2018-09-09 16:49:32 +08:00
    @wd 新检出分支,还没有绑定远程远程分支时,查看检出当前版本和检出时的 diff
    msg7086
        10
    msg7086  
       2018-09-09 17:17:16 +08:00   ❤️ 2
    本质上所有的操作对象都是某个提交。
    你指定分支,指定的是分支头部的提交。
    你指定标签,指定的是标签指向的提交。
    你指定相对地址,指定的是与当前头部相差一定距离的提交。

    你敲这命令的时候,只要搞清楚,这两端你要的是哪两个提交,就行了。

    比如你有分支 origin/a,签出到本地 a,提交了一次,叉出了分支 b,又提交了两次。
    那么看起来是这样的:

    Parents -> Commit 1 (origin/a) -> Commit 2 (a) -> Commit 3 -> Commit 4 (b)

    那么你如果要看 2 到 4,那就指定 a..b。如果要看 1 到 4,那就是 origin/a..b。如果要看 3 到 4,那就是 b~1..b。
    wd
        11
    wd  
       2018-09-09 17:29:06 +08:00 via iPhone
    @msg7086 #10 和我想说的差不多 git 的分支只是一个指针一样的东西
    az09py
        12
    az09py  
    OP
       2018-09-09 17:41:06 +08:00
    @msg7086 我最终的目的是要在程序中,把每次 push 的 diff 记录下来
    目前我的想法是尝试获取 commit 的次数,然后 HEAD^n。
    觉得这样比较傻,大佬们应该有更快的方式
    az09py
        13
    az09py  
    OP
       2018-09-09 19:29:06 +08:00
    @az09py 说错了,HEAD~N
    SoloCompany
        14
    SoloCompany  
       2018-09-09 21:42:25 +08:00
    git diff $(git merge-base HEAD $(git branch -r)) HEAD
    az09py
        15
    az09py  
    OP
       2018-09-10 00:42:51 +08:00
    @SoloCompany 抱歉,没太明白
    msg7086
        16
    msg7086  
       2018-09-10 17:07:19 +08:00
    @az09py push 之前的话,那不就是 origin/branch..branch 的差异吗?
    az09py
        17
    az09py  
    OP
       2018-09-10 21:54:12 +08:00
    push 之前,且分支是新开的,没有远程分支的时候
    az09py
        18
    az09py  
    OP
       2018-09-10 21:54:24 +08:00
    push 之前,且分支是新开的,没有远程分支的 case
    az09py
        19
    az09py  
    OP
       2018-09-10 21:54:50 +08:00
    @msg7086 push 之前,且分支是新开的,没有远程分支的 case
    msg7086
        20
    msg7086  
       2018-09-11 00:01:32 +08:00
    @az09py 新开的分支肯定有分叉点吧。找到分叉点就行了呀。
    az09py
        21
    az09py  
    OP
       2018-09-11 11:56:48 +08:00
    @msg7086 是的,主要是这些操作都要放到代码里实现,不通过人工看的。我现在通过正则把分叉点的 commit 拿出来了,不过这个分叉点并不是检出时状态。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:22 · PVG 05:22 · LAX 13:22 · JFK 16:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.