我想看看主题分支的哪些部分已经包含在上游分支中,以及在rebase上可能出现的冲突。
它应该是git-rebase的一种干运行,它在主题和上游之间显示差异,不包括不会发生的变化连接主题。
答案 0 :(得分:1)
我想看看主题分支的哪些部分已经包含在上游分支中,以及在rebase上可能出现的冲突。
如果我错了,请纠正我,但听起来你想要修补topic
中包含的相互冲突的修改,如果有的话。
由于rebase是一种合并,我认为最简单的方法是在不创建提交的情况下进行合并(您可以将其命名为“ dry merge ”)并检查未合并(即冲突)文件的差异:
git checkout topic
git merge upstream --no-commit --no-ff
在工作目录中有develop
的合并文件之后,您所要做的就是检查所有未合并文件的差异:
git diff --diff-filter=U
答案 1 :(得分:1)
这里的一种方法是制作目标分支的副本(git checkout -b tmpbranch),在此进行变基,然后将其与未修改的分支进行比较。
答案 2 :(得分:0)
一种解决方案是在差异上应用差异。这个想法是:
git-diff-rebase
脚本文件:
#!/bin/bash
upstream="$1"
topic="$2"
root=$( git rev-parse --show-toplevel )
forkpoint=$( git merge-base $upstream $topic )
if [ -z "$forkpoint" ] ; then
echo "Merge base is not found" 1>&2
exit 1
fi
# list of the changed files (space separated)
files=$( git -C "$root" diff --name-only $forkpoint $topic | paste -s -d ' ' )
diff -t --tabsize=4 -W $(tput cols) -y \
<( git -C "$root" diff $forkpoint $topic ) \
<( git -C "$root" diff $upstream $topic -- $files ) \
| grep -v '^ *>'
# skip changes that do not interfere with topic (empty left part)
注意:此脚本不适用于名称中包含空格的文件。
用法:git-diff-rebase master topic | less
如何解释结果:
* * <
- (空右侧部分)已包含在上游 + * | *
- (正确文本)已包含在上游 + * + *
- 没有冲突- * - *
- 没有冲突- * | + *
- 冲突+ * | - *
- 可能发生冲突 *
是任何文字的占位符。