使用git
,我想检查来自特定提交的哪些差异(如果有)已应用于(以及在何处)应用于特定分支。
cherry-pick
当您选择提交并且仅应用尚未应用于该分支的差异时,会执行此操作(“where”部分除外)。例如,如果我将两个文件更改提交到一个主题分支,我手动将其中一个相同的文件更改应用到 master,当我挑选具有从主题到 master 的两个文件差异的提交时,它只应用未应用的差异。为了证明这一点,从一个空文件夹运行以下命令并查看最终的差异输出:
git init
echo file 1 > file1.txt
git add .
git commit -m "Initial commit"
git branch topic
echo file 1.1 > file1.txt
git add .
git commit -m "Change file1.txt on master"
git checkout topic
echo file 1.1 > file1.txt
echo file 2 > file2.txt
git add .
git commit -m "Change file1.txt and add file2.txt on topic"
git tag to-cherrypick
git checkout master
git cherry-pick --no-commit to-cherrypick
git diff --cached
差异输出是:
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..6bb4b1d
--- /dev/null
+++ b/file2.txt
@@ -0,0 +1 @@
+file 2
表明即使精心挑选的提交有两个文件更改,它检测到第一个已被应用。
所以我的问题是:git 是否有一个暴露的管道(或介于管道和瓷器之间的某个位置)命令,它将查看提交中的大块并检查另一个分支中的每个大块,显示应用每个大块的提交?
如果该命令不存在,有什么途径可以找到它?我已经在考虑编写一个脚本/程序来将提交分解成它的块,在每个上运行 patch-id 或类似的东西,然后从共同祖先开始循环遍历另一个分支并对每个提交执行相同的操作,并且比较帅哥。如果它已经暴露,我想避免写它——我知道它存在,因为cherry-pick 这样做(除了显示“位置”)。
更新: git cherry
会做一些我正在寻找的东西。它会告诉我一个分支中的哪些提交具有一个或多个尚未应用于另一个分支的差异块。它不会告诉您在哪里应用了这些差异大块,或者提交是否有应用的大块和其他未应用的块。