使用远程分支执行或未执行的更改之间的Git差异

使用远程分支执行或未执行的更改之间的Git差异,git,git-merge,git-difftool,Git,Git Merge,Git Difftool,是否有一种方法可以通过远程分支(如origin/branch1)在阶段性/非阶段性更改之间进行git差异。git difftool有类似的选项吗 或 有没有一种方法可以通过git remote branch区分本地文件系统中的更改(忘记分段或未分段)?我只想在提交更改之前检查它们。一旦我完成拉入更改并解决与远程分支的冲突,这将非常有用。您可以使用来完成此操作。从文档中,它“从当前索引中创建一个树对象”——基本上为分级内容提供一个“名称” 以这个示例存储库为例。上游包含一个文件f,其内容为hi $

是否有一种方法可以通过远程分支(如origin/branch1)在阶段性/非阶段性更改之间进行git差异。git difftool有类似的选项吗


有没有一种方法可以通过git remote branch区分本地文件系统中的更改(忘记分段或未分段)?我只想在提交更改之前检查它们。一旦我完成拉入更改并解决与远程分支的冲突,这将非常有用。

您可以使用来完成此操作。从文档中,它“从当前索引中创建一个树对象”——基本上为分级内容提供一个“名称”

以这个示例存储库为例。上游包含一个文件
f
,其内容为
hi

$ git diff --staged
diff --git a/f b/f
index 45b983b..f471c09 100644
--- a/f
+++ b/f
@@ -1 +1,2 @@
 hi
+hello
$ git diff
diff --git a/f b/f
index f471c09..723cb71 100644
--- a/f
+++ b/f
@@ -1,2 +1,3 @@
 hi
 hello
+unstaged
从这里,您可以看到添加了行“hello”的diff即将上演

还有一个未分级的差异,添加了行“未分级”

您可以将其与远程分支进行比较,如下所示:

$ git diff origin/master $(git write-tree)
diff --git a/f b/f
index 45b983b..f471c09 100644
--- a/f
+++ b/f
@@ -1 +1,2 @@
 hi
+hello
在这种情况下,它恰好与git diff--staged相同,但是如果我们稍微向前转发一点上游分支:

$ git fetch -q && git show origin/master  | tail -7
diff --git a/f b/f
index 45b983b..5f69508 100644
--- a/f
+++ b/f
@@ -1 +1,2 @@
 hi
+from upstream
现在我们看到了完整的更改:

$ git diff origin/master $(git write-tree)
diff --git a/f b/f
index 5f69508..f471c09 100644
--- a/f
+++ b/f
@@ -1,2 +1,2 @@
 hi
-from upstream
+hello

实现这一目标的一个方法是

  • 假设您在一个文件夹
    dir1
  • 在另一个文件夹中签出同一回购协议
    dir2
    ,切换到远程 分支机构
  • 使用unix
    diff
    命令查看两个 目录
diff--brief-r dir1/dir2/

是否有一种方法可以在阶段性更改和远程分支(如origin/branch1)之间进行git差异

只需运行:

git diff --cached origin/branch1
(如果您愿意,您可以在这里使用
--staged
;我使用
--cached
,因为
git rm
--cached
但没有
--staged
)。这向您展示了一种更改
原点/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
(颠倒顺序):

正如您所看到的,这些与不使用
--cached
aka
--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
git difftool有类似的选项吗

这些相同的选项(
--cached
或not,并使用任何名称来标识任何提交)也可在
git difftool
中使用



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

为什么不提交它,用git远程分支来区分本地文件系统中的更改(忘记暂存或未暂存)有什么方法吗?我只想在提交更改之前检查我的更改。一旦我完成了将更改与远程分支的合并,这将非常有用。太棒了!谢谢你,托瑞克。
$ 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