取 push 时,我用的 git diff origin/${branch} HEAD 但是只能去远程分支存在的情况,如果分支是新开的,且要在 push 前的 hook 里拿到 diff,有木有什么命令
另外有没有什么命令能判断一个远程分支是否存在
1
sagaxu 2018-09-09 12:00:47 +08:00 via Android
HEAD^
|
3
sagaxu 2018-09-09 12:55:11 +08:00 via Android 1
git log branch_name --graph
|
4
wd 2018-09-09 13:12:46 +08:00 via iPhone
没明白 新开的分支和哪里的 diff ?
|
5
az09py OP @wd 新检出的分支,可能有 n 次 commit 还没有提交,push 前查看这次 push 前所有未提交 commit 的 diff
|
6
helloSpringBoot 2018-09-09 13:26:35 +08:00 via Android
diff 后面可以接 commit 吧
|
7
wd 2018-09-09 16:24:55 +08:00 1
@az09py 实际上 git 本地和远端的分支可以不同名的,比如本地的 dev 分支可以往远端的 master 分支 push。所以你得说清楚新检出的和远端的什么分支比较,如果是远端的同名分支,那也有可能远端还没有这个分支,那 diff 显示什么呢?
|
8
kaneg 2018-09-09 16:37:12 +08:00 via iPhone
git log <local branch>..<remote branch>
例如:git log master..origin/master |
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。 |
12
az09py OP |
14
SoloCompany 2018-09-09 21:42:25 +08:00
git diff $(git merge-base HEAD $(git branch -r)) HEAD
|
15
az09py OP @SoloCompany 抱歉,没太明白
|
17
az09py OP push 之前,且分支是新开的,没有远程分支的时候
|
18
az09py OP push 之前,且分支是新开的,没有远程分支的 case
|
21
az09py OP @msg7086 是的,主要是这些操作都要放到代码里实现,不通过人工看的。我现在通过正则把分叉点的 commit 拿出来了,不过这个分叉点并不是检出时状态。
|