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

2018-09-09 10:51:49 +08:00
 az09py

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

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

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

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

比如你有分支 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
2018-09-09 17:29:06 +08:00
@msg7086 #10 和我想说的差不多 git 的分支只是一个指针一样的东西
az09py
2018-09-09 17:41:06 +08:00
@msg7086 我最终的目的是要在程序中,把每次 push 的 diff 记录下来
目前我的想法是尝试获取 commit 的次数,然后 HEAD^n。
觉得这样比较傻,大佬们应该有更快的方式
az09py
2018-09-09 19:29:06 +08:00
@az09py 说错了,HEAD~N
SoloCompany
2018-09-09 21:42:25 +08:00
git diff $(git merge-base HEAD $(git branch -r)) HEAD
az09py
2018-09-10 00:42:51 +08:00
@SoloCompany 抱歉,没太明白
msg7086
2018-09-10 17:07:19 +08:00
@az09py push 之前的话,那不就是 origin/branch..branch 的差异吗?
az09py
2018-09-10 21:54:12 +08:00
push 之前,且分支是新开的,没有远程分支的时候
az09py
2018-09-10 21:54:24 +08:00
push 之前,且分支是新开的,没有远程分支的 case
az09py
2018-09-10 21:54:50 +08:00
@msg7086 push 之前,且分支是新开的,没有远程分支的 case
msg7086
2018-09-11 00:01:32 +08:00
@az09py 新开的分支肯定有分叉点吧。找到分叉点就行了呀。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/487559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX