我有一个旧的分支,我想删除它。但是,在这样做之前,我想检查对这个分支的所有提交是否在某个时刻合并到其他分支中。因此,我希望看到所有提交到我的当前分支还没有应用到任何其他分支[或者,如果没有一些脚本是不可能的,如何看到一个分支中的所有提交还没有应用到另一个给定的分支?]。
当前回答
对于那些仍然在寻找简单答案的人来说,看看git cherry。它比较实际的差异而不是提交哈希值。这意味着它可以容纳被精心挑选或重基的提交。
首先签出你想要删除的分支:
Git checkout[分支删除]
然后使用git cherry将它与你的主要开发分支进行比较:
Git cherry -v master
示例输出:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
注意:-v标志将包括提交消息和SHA散列。
前面带“+”的行在要删除的分支中,但不在主分支中。前面有'-'的在master中有相同的commit。
对于不在master中的JUST提交,将cherry pick和grep结合起来:
git cherry - |大师grep + ^ \ "
示例输出:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
其他回答
要显示oldbranch中的提交,而不是newbranch中的提交:
git log newbranch..oldbranch
要显示这些提交的差异(注意有三个点):
git diff newbranch...oldbranch
下面是带有图表说明的文档https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
我也想计算提交次数,下面是如何做到这一点:
计算当前分支(HEAD)上有多少提交,而不是master上有多少提交:
git log --oneline ^master HEAD | wc -l
Wc -l的意思是“单词计数”——数单词“l”的个数。
当然,还可以看到整个日志消息,正如其他答案所给出的:
git log ^master HEAD
...或者用浓缩的单行形式:
git log --oneline ^master HEAD
如果你也不想计算合并提交,你可以用——no-merge排除那些:
git log --oneline --no-merges ^master HEAD | wc -l
etc.
只需使用git cherry来选择分支newFeature42中的所有提交,例如:
git cherry -v master newFeature42
您可以使用这个简单的脚本查看未合并的提交
#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
# git branch-notmerge <branchname>
#
# Setup git alias
# git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')
你也可以使用工具git-wtf来显示分支的状态
对于那些仍然在寻找简单答案的人来说,看看git cherry。它比较实际的差异而不是提交哈希值。这意味着它可以容纳被精心挑选或重基的提交。
首先签出你想要删除的分支:
Git checkout[分支删除]
然后使用git cherry将它与你的主要开发分支进行比较:
Git cherry -v master
示例输出:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
注意:-v标志将包括提交消息和SHA散列。
前面带“+”的行在要删除的分支中,但不在主分支中。前面有'-'的在master中有相同的commit。
对于不在master中的JUST提交,将cherry pick和grep结合起来:
git cherry - |大师grep + ^ \ "
示例输出:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式