如何区分本地未提交的更改和来源


141

假设我克隆了一个存储库并开始修改文件。我知道,如果我有本地未提交的更改,则可以按以下方式进行比较,git diff test.txt它将显示当前本地HEAD与文件中已修改的,未提交的更改之间的区别。如果提交这些更改,则可以使用来将其与原始存储库进行比较git diff master origin/master

但是在本地提交之前,有什么方法可以将本地更改与服务器上的原始存储库进行比较?我git diff --cached master origin/master没有运气就尝试了各种排列方式。


我想知道我的文件与本地上次提交的版本相比有多少更改。我的问题的答案就是这个问题。谢谢!
Souvik Ghosh

Answers:


133

鉴于远程存储库已通过缓存进行git fetch了比较,应该可以与这些提交进行比较。尝试以下方法:

$ git fetch origin
$ git diff origin/master

5
啊,太好了。关键是要离开主人。我曾经尝试过在进行提取的组合中使用,但是当我这样做时,git diff master origin/master它仍与提交的版本进行比较(回想起来很明显)。但是现在忽略主服务器,会将本地更改与获取的版本进行比较。
Chaitanya

@Chaitanya好,我可以帮忙。实际上,我发现Git使用的不同样式有点恼人:一旦您必须编写origin master文字,然后再写其他地方origin/master。恕我直言,仍有工作要做。
JJD

这似乎不起作用:尽管git diff origin/master返回fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.主控在原点上存在,例如git fetch origin master工作正常,
mikemaccana 2015年

42

我知道这不是一个问题的确切问题问过,但我发现这个问题寻找一个差异文件中的一个分支和本地未提交的文件,我想我会分享

句法:

git diff <commit-ish>:./ -- <path>

例子:

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(感谢Eric Boehs提供了一种无需两次输入文件名的方法)


我更喜欢一般解决方案,而不是上面的狭义解决方案。介意分享您在哪里发现的?
fbicknel

我似乎找不到有关commit-ishand冒号分隔符的详细文档。git-diff上的文档似乎没有提到它。我使用它已经很久了,以至于我不记得最初在哪里找到它。可能是其他命令上的其他人的示例,我刚刚进行了试验git-diff。恐怕另一个答案commit-ish是目前我能提出的最好的答案
Nate

3
一个不错的补充是git diff master:./ -- README.md。这样,您不必键入README.md两次,就可以轻松地将其添加到别名中。
埃里克·博斯

谢谢@EricBoehs,这是一个很好的建议。
Nate

1
这句法不是为我工作......而git diff master: -- README.md./创建一个/dev/null源泉,而不是远程分支。使用git版本2.19.0
rustyDev '19

21

查看对现有文件的非暂存(非添加)更改

git diff

请注意,这不会跟踪新文件。查看分阶段的,未提交的更改

git diff --cached


9

如果要直观地比较文件,可以使用:

git difftool

对于每个更改的文件,它将自动启动您的差异应用程序。

PS:如果您未设置差异应用程序,则可以按照以下示例进行操作(我使用Winmerge):

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

此更改会立即生效吗?
Dilip Raghunathan

我很好奇,这和所问的问题有什么关系?git difftool会不会只将本地更改与master进行比较?但是,OP希望在本地更改和远程主机之间进行操作。
infoclogged

到目前为止,最简单的解决方案
克里斯·约翰逊
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.