有没有办法在远程分支的分阶段/非分阶段更改之间进行 git diff,比如 origin/branch1。git difftool 有类似的选项吗?
或者
有没有办法使用 git 远程分支来区分我的本地文件系统中的更改(忘记暂存或未暂存)?我想要的只是在提交之前检查我的更改。一旦我完成了更改并解决了与远程分支的冲突,这真的很有用。
有没有办法在远程分支的分阶段/非分阶段更改之间进行 git diff,比如 origin/branch1。git difftool 有类似的选项吗?
或者
有没有办法使用 git 远程分支来区分我的本地文件系统中的更改(忘记暂存或未暂存)?我想要的只是在提交之前检查我的更改。一旦我完成了更改并解决了与远程分支的冲突,这真的很有用。
有没有办法在分阶段更改和远程分支之间进行 git diff,比如 origin/branch1。
赶紧跑:
git diff --cached origin/branch1
(--staged
如果您愿意,可以在此处使用;我使用--cached
because git rm
has--cached
但 not --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
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
或不使用,并使用任何名称来标识任何提交)也可用于git difftool
.
值得记住的是,在 Git 中实际上并没有任何远程分支。您有一些提交,并且您有一些提交的名称。一种可能的名称形式是远程跟踪名称,例如origin/branch1
. 有些人喜欢称其为“远程分支”,但它只是您自己的(本地)Git 对前一段时间指向的位置的记忆,当您运行origin
并让您的 Git 拾取他们的 Git 分支时。branch1
git fetch origin
实现这一目标的一种方法是
dir1
dir2
,切换到远程分支diff
命令查看两个
diff --brief -r dir1/ dir2/
您可以使用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”行的 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