使用远程分支在分阶段或非分阶段更改之间进行差异

时间:2017-12-01 02:56:11

标签: git git-merge git-difftool

有没有办法在一个远程分支如origin / branch1的分段/非分段更改之间进行git diff。 git difftool有类似的选择吗?

OR

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

3 个答案:

答案 0 :(得分:3)

  

有没有办法在分阶段更改和远程分支之间执行git diff,比如origin / branch1。

跑步:

git diff --cached origin/branch1

(如果您愿意,可以在此使用--staged;我使用--cached,因为git rm--cached--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
  

git difftool有类似的选项吗?

--cached也可以使用这些相同的选项(git difftool或不使用任何名称来识别任何提交)。

值得记住的是,Git中没有任何远程分支。你有一些提交,你有一些提交的名称。一种可能的名称形式是远程跟踪名称,如origin/branch1。有些人喜欢称这是一个远程分支",但它只是你自己(本地)Git对origin {{1}所在地的记忆前段时间,当你跑branch1并让你的Git拿起他们的Git的分支时指出。

答案 1 :(得分:0)

您可以使用git write-tree来完成此操作。从文档中它“从当前索引创建一个树对象” - 基本上给你的分阶段内容一个“名称”。

拿这个样本库。上游包含单个文件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”行的差异即将上演。

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

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

$ 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

答案 2 :(得分:0)

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

  • 我们假设您已在一个文件夹dir1
  • 中暂存了更改
  • 在另一个文件夹dir2中签出相同的仓库,切换到远程 分支
  • 使用unix diff命令查看两者的递归差异 目录
  

diff --brief -r dir1/ dir2/