克隆和原始远程存储库之间的git diff


170

我已经克隆了github存储库,并且在本地未进行任何更改。Github存储库在同一个分支上进行了提交。

  1. 如何找到本地存储库和原始github存储库之间的差异?
  2. 如何找到工作副本与原始github存储库之间的区别?
  3. 如何在本地存储库和同一项目的另一个github存储库之间找到差异?


1
@CiroSantilli新疆改造中心六四事件法轮功:我认为这已经足够不同:另一个问题询问任何通用的远程分支,而这涉及到GitHub,并询问三个不同的起点。它们肯定相似,因此您的链接肯定有用。
jvriesem

Answers:


161

1)添加要比较的任何远程存储库:

git remote add foobar git://github.com/user/foobar.git

2)更新远程的本地副本:

git fetch foobar

提取不会更改您的工作副本。

3)比较本地存储库中的任何分支与您添加的任何远程:

git diff master foobar/master

我需要在diff之前先获取git吗?我猜没有它就没有办法进行比较。
奥列格·普罗德尼科夫2011年

这实际上只是对问题3的答复(与另一个github存储库进行比较)。
Ruslan Kabalin 2011年

5
没有什么可以将“原始github存储库”与任何其他远程存储库区分开。还是我误会了什么?
dbyrne 2011年

当我尝试使用git 2.7.4时,“ git diff master foobar / master”没有显示差异。我看起来像它比较我的本地副本(“母版”)与作为第一个参数(“母版”)给出的存储库,并且在那里仅比较“路径/文件”“ foobar /母版”。但是命令“ diff foobar / master”对我有用,将我的本地主机与foobar / master进行了比较。
user2081279 '16

代替fetch(nr.2)作为替代:git remote update-它会更新所有设置为跟踪远程分支的分支,但不合并其中的任何更改;或git pull
Timo

49

回答您的问题的另一种方式(假设您在master上并且已经执行过“ git fetch origin”,以使您回购有关远程更改的信息):

1)自创建本地分支以来在远程分支上提交:

git diff HEAD...origin/master

2)我假设“工作副本”是指您的本地分支,其中包含尚未在远程的某些本地提交。要查看本地分支上的差异,但远程分支上不存在的差异,请运行:

git diff origin/master...HEAD

3)请参阅dbyrne 的答案


谢谢您的HEAD..origin/master语法!我们一直在使用Origin / HEAD不存在的错误,这解决了它。
丹·贝查德

@ruslan:git diff HEAD...origin/master如果克隆了我有权进行更改的远程目录,什么也不返回,这是什么意思?
蒙娜·贾拉勒

使用Windows GUI进行克隆时发生错误,因此我想知道克隆是否完全通过。我看到文件夹在我的目录中,但我想确保它与远程目录相同。但是在git shell中,git diff不返回任何内容。我是否对克隆成功感到困惑?
蒙娜·贾拉勒

@MonaJalal表示自克隆以来没有上游更改。
Ruslan Kabalin '16

21

此示例可能会帮助某人:

注意“ origin”是我的远程别名“ Github上的内容”
注意“ mybranch”是我的别名与我正在与github同步的分支“ what is local”
-如果您未创建,则您的分支名称为'master'之一。但是,我正在使用其他名称mybranch来显示使用分支名称参数的位置。


我在github上的远程仓库到底是什么?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

添加“具有相同代码的其他github存储库”-我们称其为fork:

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

确保我们的本地仓库是最新的:

$ git fetch

在本地更改一些东西。假设文件./foo/bar.py

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

查看我未提交的更改

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

在本地提交。

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

现在,我和我的遥控器不同(在github上)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

与remote进行比较-您的fork :(通常使用来完成git diff master origin

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(git push将其应用于远程)

我的远程分支与远程主分支有什么区别?

$ git diff origin/mybranch origin/master

我的本地内容与远程主分支有什么不同?

$ git diff origin/master

我的东西与其他仓库的分支,同一仓库的master分支有何不同?

$git diff mybranch someOtherRepo/master

5
在执行“ git diff”之前,我认为有必要进行“ git fetch”以确保我们的远程本地副本是最新的。

1
我已经读了20篇关于如何比较远程和本地的文章,我自己才弄清楚:首先需要git fetch。git确实是RCS的汇编代码。耶稣。感谢您的确认,唐!
Terence Parr 2014年

刚刚添加git fetch到此答案中。
FlipMcF 2014年

1
嗯...我不喜欢我用'myfork'作为我的分支名称。这可能会使某人感到困惑(就像我一样,刚刚回来回答这个问题)
FlipMcF 2015年

编辑-清晰并回答“叉子差异”问题3
FlipMcF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.