远程分支的暂存或未暂存更改之间的 Git diff

标签 git git-merge git-difftool

有没有一种方法可以使用远程分支(比如 origin/branch1)在暂存/未暂存更改之间执行 git diff。 git difftool 有类似的选项吗?

有没有办法通过 git 远程分支来区分本地文件系统中的更改(忘记暂存或未暂存)?我只想在提交之前检查我的更改。一旦我完成了更改并解决了与远程分支的冲突,这就非常有用。

最佳答案

Is there a way to do a git diff between staged changes and a remote branch say origin/branch1.

只需运行:

git diff --cached origin/branch1

(如果你愿意,你可以在这里使用 --staged;我使用 --cached 因为 git rm--缓存但不是--staged)。这向您展示了一种更改 origin/branch1 以匹配您已上演的内容的方法:

$ git show origin/branch1:README
initial version
$ cat README
initial version
second version
$ echo staged >> README && git add README
$ echo replace whole thing > README
$ cat README
replace whole thing
$ git diff --cached origin/branch1
diff --git a/README b/README
index 42549ca..d9074b8 100644
--- a/README
+++ b/README
@@ -1 +1,3 @@
 initial version
+second version
+staged

如果您想了解一种方法来更改已上演的内容以匹配 origin/branch1,请添加 -R(颠倒顺序):

$ git diff -R --cached origin/branch1
diff --git b/README a/README
index d9074b8..42549ca 100644
--- b/README
+++ a/README
@@ -1,3 +1 @@
 initial version
-second version
-staged

如您所见,这些与不使用 --cached 又名 --staged 的比较有很大不同,但这也很简单:

$ git diff origin/branch1
diff --git a/README b/README
index 42549ca..acb8b7a 100644
--- a/README
+++ b/README
@@ -1 +1 @@
-initial version
+replace whole thing

Is there a similar option with git difftool?

这些相同的选项(--cached 或不缓存,以及使用任何名称来标识任何提交)也可用于 git difftool


这里值得记住的是,在 Git 中实际上并没有任何远程分支。您有一些提交,并且您有一些提交的名称。一种可能的名称形式是 远程跟踪名称,例如 origin/branch1。有些人喜欢称其为“远程分支”,但它只是你自己的(本地)Git 对 originbranch1 指向的位置的内存,当你运行时git fetch origin 并让你的 Git 获取他们的 Git 分支。

关于远程分支的暂存或未暂存更改之间的 Git diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47585962/

相关文章:

java - GitHub、当前 Netbeans 6.9 项目和 Git 插件

git - 如何使用我喜欢的差异工具/查看器查看 'git diff' 输出?

c++ - Git、SourceTree、VisualStudio 和损坏的 .cpp 文件

git - 使用 git 的 Magento 工作流程

java - 使用 gitflow-maven-plugin 从发布分支发布到主控的正确 Maven 命令是什么?

gitlab - Git 显示合并提交,列出比合并文件更多的文件

git - 如何找到两个分支之间的待提交提交(排除已经挑选/merge 的更改)?

git - 如何在 Git 中手动 merge 所有文件?

git - 如何让 git log 显示相对于当前目录的文件路径?