有没有办法在一个远程分支如origin / branch1的分段/非分段更改之间进行git diff。 git difftool有类似的选择吗?
OR
有没有办法在我的本地文件系统中区分更改(忘记暂存或未分阶段)与git远程分支?我想要的只是在提交之前检查我的更改。一旦我完成了更改并解决与远程分支的冲突,这非常有用。
答案 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
中签出相同的仓库,切换到远程
分支diff
命令查看两者的递归差异
目录
diff --brief -r dir1/ dir2/