如何在git分支之间找到更改的公共文件?

Mik*_*ape 5 git

我有一个上游存储库,有一些变化.我有本地更改,我想改变上游的变化.我想知道我在本地更改的文件也改变了上游,所以我可以检查任何自动合并.或者,我想在rebase期间手动执行任何合并.

Cas*_*bel 12

列出已更改的文件

因为rebase/merge可能很耗时,所以最好避免做一个不必要的.根据您需要的信息类型,有多种方法可以查看已更改的内容.

如果您有兴趣知道每次提交哪些文件已更改,我建议git-log:

git log [--pretty=<format>] --name-only <common-branch>..<local-branch>
Run Code Online (Sandbox Code Playgroud)

您可以使用该--pretty选项获取所需的标题信息; <format>可以有多种选择,包括带字段的自定义字符串 - 有关详细信息,请参见手册页.

--name-only选项实际上是传递给git-diff,所以如果您不关心每次提交结果,您可以直接进入源:

git diff --name-only <common-branch> <local-branch>
Run Code Online (Sandbox Code Playgroud)

请注意,两个命令的分支指定方式不同.

您也可以将此应用于上游更改,更改<local-branch><upstream-branch>两个文件列表并最终结束.我会告诉你如何比较它们,虽然grep的-f选项可以很方便...

手动合并

专制统治打败了我.如果您已根据输出完成了一些智能处理,则git-log只能编辑您看到的重叠文件更改的提交.如果您正在合并而不是变基础,那么您将使用该--no-commit选项.

另请参见git-merge手册页的配置部分.您可能希望将merge.conflictstyle设置为diff3,以便您可以查看原始文本以及任何一方的更改.

如果你真的急于压制所有自动冲突解决的尝试,我相信你可以插入一个虚拟的合并工具(通过merge.tool和mergetool.cmd),什么都不做并返回失败.

说完所有这些后,我还应该说,根据我对git merge的经验,我看到了很多冲突,但是记不起一次不正确的自动合并.我个人相信它的合并能力.之后检查它应该是充足的.


Jef*_*and 4

扩展一点:对于问题的第一部分,创建一个新分支,自动在那里进行变基,然后与您的工作副本进行比较。

git branch workBranch
git commit #throw your locals into your own branch for a brief moment
git branch testBranch
git rebase otherBranch
git diff workBranch
Run Code Online (Sandbox Code Playgroud)

您也可能只需执行“git diff origin/branchToMerge”就可以逃脱惩罚

对于互动部分:

git rebase --interactive.
Run Code Online (Sandbox Code Playgroud)

将所有提交设置为“编辑”,您将一一浏览每个提交,让您有机会查看该提交的所有完成情况并根据您的喜好进行编辑。

编辑以回答评论

好的,为了严格查看更改的文件,请执行以下操作:

git log a0a0a0..b1b1b1 --name-only --pretty=oneline | egrep -v '^[a-f0-9]{40} ' | sort | uniq > lista
git log a0a0a0..c2c2c2 --name-only --pretty=oneline | egrep -v '^[a-f0-9]{40} ' | sort | uniq > listb
cat lista listb | sort | uniq -d
Run Code Online (Sandbox Code Playgroud)

那些 shell 杂乱将只显示两个日志中发生更改的文件。对于 a0a0a0,使用您的公共点。将 b1/c2 弦替换为两个分叉分支的尖端。