标签: git-diff

合并每个文件后是否必须退出 Git diff 工具?

我正在使用 GUI difftool(p4merge、kdiff3、araxis 等)来查看 Git 合并情况。这很好用,但似乎我需要在编辑合并中的每个文件后退出该工具,以便 Git 移动到下一个文件并完成合并。有办法避免这种情况吗?

我是否可以以某种方式迭代合并中的所有文件,而无需退出每个文件之间的合并工具?更好的是,有没有一种方法可以将所有文件一起打开(例如,这样我就可以协调我的合并编辑,可能通过在文件之间来回移动),然后在完成后关闭合并工具和他们所有人一起?

git git-diff git-merge

5
推荐指数
1
解决办法
3107
查看次数

如何在 git 上执行 3 向视觉差异?

我想对存在于 2 个不同分支中的单个文件进行 3 路比较,即每个分支中的最后一次提交,并考虑共同的祖先。我想使用一个允许进行三向比较的外部工具。我正在考虑使用 git difftool,但据我所知,它只允许比较给定文件的任何两个版本。我可以使用 mergetool,但这迫使我首先运行 git merge,以便设置 BASE、REMOTE 和 LOCAL 变量。我不想运行 git merge。我只想首先进行 3 路比较,以查看两个分支中的文件在考虑到其共同祖先时所做的更改。

是否可以选择使用 difftool 或 mergetool 来完成我需要的操作?谢谢

git git-diff mergetool git-difftool

5
推荐指数
1
解决办法
1852
查看次数

使用 --numstat 和 --name-status 运行 git diff-tree

我正在编写一个脚本来分析 git 存储库中所做的更改。在某些时候,我需要迭代所有提交并获取有关每个提交的这些信息:

  • 提交ID
  • 日期
  • 提交消息
  • ...
  • 文件已更改
    • 文件名
    • 更改类型(添加/修改/删除/重命名)
    • 新文件名(如果更改类型为“重命名”)
    • 添加的行数
    • 删除的行数

我在 之前收到提交消息和日期git log。我遇到的问题是文件。

如果我不想收集添加/删除的行数,我只需使用

git diff-tree --no-commit-id --name-status -M -r abcd12345
Run Code Online (Sandbox Code Playgroud)

输出会是这样的

A   Readme.md
M   src/something.js
D   src/somethingelse.js
R100    tests/a/file.js tests/b/file.js
Run Code Online (Sandbox Code Playgroud)

我可以以编程方式解析和阅读。

要获取有关添加/删除的行的信息,我可以使用以下命令:

git diff-tree -M -r --numstat abcd12345
Run Code Online (Sandbox Code Playgroud)

输出如下:

abcd12345
82  0   Readme.md
41  98  src/something.js
0   64  src/somethingelse.js
0   0   tests/{a => b}/file.js
Run Code Online (Sandbox Code Playgroud)

对于重命名的文件来说,这不是机器可读的。

我的问题是:有没有办法结合这两个命令?看来我不能使用--numstatwith --name-status

我可以运行两个单独的命令并将结果合并到我的脚本中。在这种情况下,是否可以使用任何其他开关来使第二个命令的结果更具机器可读性?

谢谢。

git git-diff

5
推荐指数
1
解决办法
983
查看次数

有使用 git merge 耐心策略的例子吗?

我找不到任何真实的例子来--patience给出与正常策略不同的结果。

根据这个答案,如果我有这个文件:

.foo1 {
    margin: 0;
}

.bar {
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)

我以这种方式更新它:

.bar {
    margin: 0;
}

.foo1 {
    margin: 0;
    color: green;
}
Run Code Online (Sandbox Code Playgroud)

我应该看到两个不同的差异取决于我使用的算法。

但对我来说这些命令的输出总是相同的

git diff --diff-algorithm=patience
git diff
Run Code Online (Sandbox Code Playgroud)
diff --git a/foo.bar b/foo.bar
index 453dcb1..42cd4b4 100644
--- a/foo.bar
+++ b/foo.bar
@@ -1,7 +1,8 @@
-.foo1 {
+.bar {
     margin: 0;
 }

-.bar {
+.foo1 {
     margin: 0;
+    color: green;
 }
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)

我在用着git version 2.14.2

git diff git-diff git-merge

5
推荐指数
1
解决办法
1376
查看次数

从两个单独存储库上的 git diff 中排除目录

我正在尝试在两个单独的存储库之间进行 git diff。单独使用git diff ProjectA ProjectB是可行的,但我必须滚动浏览目录中的所有差异.git

我尝试git diff ProjectA ProjectB -- . ':!.git'排除该.git目录,但出现以下错误。

Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index] <path> <path>
Run Code Online (Sandbox Code Playgroud)

我也尝试过git diff --no-index ProjectA ProjectB -- . ':!.git',但只是收到消息:

usage: git diff --no-index <path> <path>
Run Code Online (Sandbox Code Playgroud)

git diff 两个不同的存储库同时排除某些目录的正确方法是什么?

git git-diff

5
推荐指数
1
解决办法
2134
查看次数

git diff 用于任何存储库之外的自定义 2 个文件?

我需要git diff任何存储库之外的 2 个文件的功能。有办法做到吗?类似git diff --file1 /path/file1.txt --file2 /path/file2.txt如果没有,替代解决方案是什么?

git comparison diff git-diff

5
推荐指数
2
解决办法
1779
查看次数

vscode 是否可以显示由像 SourceTree 这样的帅哥压缩的 git diffs?

vscode 似乎只显示整个文件,但我只想看到像 SourceTree 一样被大块头压缩的改变的位。这可能吗?

git-diff visual-studio-code

5
推荐指数
1
解决办法
184
查看次数

在没有冲突的情况下自动合并 git(使用逐字差异而不是逐行)

我想自动合并提交,其中每个提交更改同一行上的不同单词。目标是使用git作为文档存储并以编程方式访问它(因此,理想情况下无需解决冲突)。在我的用例中,我确信更改不会重叠(它们不会影响相同的单词,尽管位于同一)。

git-diff可以向我展示两次提交之间的差异,不仅是每行,而且是每个单词或每个字符。例如:

$ git diff --word-diff-regex=. HEAD HEAD~
Run Code Online (Sandbox Code Playgroud)

如果git-diff可以识别发生变化的单词(而不是整行),我确信我可以git-merge逐字(或逐字符)地检测冲突。我错了。根据我的理解(来源),在深处,该git-diff工具在行上运行,并且单词或字符差异功能已经与 git 返回的这些基于行的结果一起使用。

在这个答案中,建议使用干净污迹过滤器,以便将每个单词存储在快照中的单独行上。然而,在我看来,这太过分了。

你会选择什么方法?

git git-diff git-merge git-merge-conflict

5
推荐指数
1
解决办法
391
查看次数

git diff 忽略行尾的分号

一位同事创建了一个提交,他的编辑器在每一行(以及其他更改)后附加了分号。

我知道我可以使用-w开关来忽略空白错误。是否有某种git魔法可以让 git;完全忽略,或者只有在 EOL 时更好?

就像是:

git diff --ignore=; -w
Run Code Online (Sandbox Code Playgroud)

git git-diff

5
推荐指数
2
解决办法
436
查看次数

Xcode 11 中的差异在哪里?

在以前的版本中,很容易从任何特定提交中区分我的代码和代码。但是 Xcode 11 中的这个按钮在哪里?!只有作者按钮。 在此处输入图片说明

xcode git-diff xcode11

5
推荐指数
1
解决办法
1114
查看次数