Git 远程分支的暂存或未暂存更改之间的差异
Git diff between staged or unstaged changes with a remote branch
有没有办法在 staged/unstaged 更改与远程分支 origin/branch1 之间进行 git 差异。 git difftool 是否有类似的选项?
或
有没有办法通过 git 远程分支来区分本地文件系统中的更改(忘记暂存或未暂存)?我只想在提交之前检查我的更改。一旦我完成了更改并解决了与远程分支的冲突,这就非常有用。
您可以使用 git write-tree
来完成此操作。从文档中它 "creates a tree object from the current index" -- 基本上是给你的暂存内容一个 "name"。
获取此示例存储库。上游包含一个文件 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
还有一个未分级的差异,其中添加了行 "unstaged"
您可以将其与远程分支进行如下比较:
$ 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
- 在另一个文件夹中检出相同的 repo
dir2
,切换到远程
分支
- 使用 unix
diff
命令查看两者的递归差异
目录
diff --brief -r dir1/ dir2/
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
有 --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
Is there a similar option with git difftool?
这些相同的选项(--cached
或不,以及使用任何名称来标识任何提交)也可用于 git difftool
。
这里值得记住的是 Git 中实际上没有任何远程 b运行ches。您有一些提交,并且您有一些提交的名称。一种可能的名称形式是 远程跟踪名称,例如 origin/branch1
。有些人喜欢称它为 "remote branch",但它只是你自己的(本地)Git 对 origin
的 branch1
前一段时间指向的位置的记忆,当你运行 git fetch origin
让你的 Git 接他们的 Git 的 b运行ches.
有没有办法在 staged/unstaged 更改与远程分支 origin/branch1 之间进行 git 差异。 git difftool 是否有类似的选项?
或
有没有办法通过 git 远程分支来区分本地文件系统中的更改(忘记暂存或未暂存)?我只想在提交之前检查我的更改。一旦我完成了更改并解决了与远程分支的冲突,这就非常有用。
您可以使用 git write-tree
来完成此操作。从文档中它 "creates a tree object from the current index" -- 基本上是给你的暂存内容一个 "name"。
获取此示例存储库。上游包含一个文件 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
还有一个未分级的差异,其中添加了行 "unstaged"
您可以将其与远程分支进行如下比较:
$ 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
- 在另一个文件夹中检出相同的 repo
dir2
,切换到远程 分支 - 使用 unix
diff
命令查看两者的递归差异
目录
diff --brief -r dir1/ dir2/
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
有 --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
Is there a similar option with git difftool?
这些相同的选项(--cached
或不,以及使用任何名称来标识任何提交)也可用于 git difftool
。
这里值得记住的是 Git 中实际上没有任何远程 b运行ches。您有一些提交,并且您有一些提交的名称。一种可能的名称形式是 远程跟踪名称,例如 origin/branch1
。有些人喜欢称它为 "remote branch",但它只是你自己的(本地)Git 对 origin
的 branch1
前一段时间指向的位置的记忆,当你运行 git fetch origin
让你的 Git 接他们的 Git 的 b运行ches.