73

在提交拉取请求之前,我正在尝试diff使用 GitHub 存储库访问我的本地文件,因此我可以看到会显示什么。有没有一种准确的方法来做到这一点?

我假设 GitHub 的比较工具操纵了 Git 的diff.

4

6 回答 6

149

将本地工作目录与远程分支进行比较,例如origin/master

  1. git fetch origin master
    这告诉 git 从名为“origin”的远程获取名为“master”的分支。 git fetch不会影响您工作目录中的文件;它不会像这样做那样尝试合并更改git pull
  2. git diff --summary FETCH_HEAD
    获取远程分支时,可以通过 FETCH_HEAD 在本地引用它。上面的命令告诉 git 将工作目录文件与 FETCHed 分支的 HEAD 进行比较,并以摘要格式报告结果。摘要格式提供了更改的概述,通常是一个很好的开始方式。如果您想了解更多信息,请使用--stat而不是--summary.
  3. git diff FETCH_HEAD -- mydir/myfile.js
    如果您想查看对特定文件(例如 myfile.js)的更改,请跳过该--summary选项并引用您想要的文件(或树)。

如前所述,origin引用远程存储库并master引用该存储库中的分支。默认情况下,git 使用origin远程的名称,因此如果您这样做git clone <url>,它将默认调用该远程origin。用于git remote -v查看origin指向的内容。

您可能拥有多个遥控器。例如,如果您在 GitHub 上“分叉”一个项目,您通常需要远程引用原始项目以及您自己的分叉。假设您创建https://github.com/yourusername/someprojecthttps://github.com/theoriginal/someproject. 按照惯例,您将远程命名为原始 repo upstream,而您自己的 fork 将命名为origin. 如果您在 GitHub 上对 fork 进行更改并希望在本地获取这些更改,您将使用git fetch origin master. 如果upstream在进行更多更改之前您需要在本地同步所做的更改,您将使用git fetch upstream master.

于 2015-10-22T20:02:32.137 回答
47

不要做pull

  • do a fetch(语法与 相同git pull,但不会自动合并)
  • diff在你的 dest 分支和另一个分支之间做一个
  • 然后做一个merge如果你想
于 2012-08-13T13:50:08.253 回答
6

根据 OP 的评论,他的“问题是 Windows 与 Unix LFs”的一部分,这应该会有所帮助:

您可以使用以下配置命令告诉git-diff忽略EOL代码的差异。

git config --global core.whitespace cr-at-eol
于 2013-11-14T01:43:42.870 回答
3

您可以使用:git diff remote/my_topic_branch my_topic_branch

my_topic_branch您的主题分支在哪里。

于 2018-11-22T14:46:11.473 回答
0

EG git diff master origin/master

于 2021-10-15T01:13:27.273 回答
0

需要记住的重要一点: Git diff 将显示两个提交的分支(远程或本地)之间的差异。

步骤 1) - 提交本地

所以第一步要做的是确保你已经提交了你的本地存储库。您可以运行git status以查看是否还有任何文件。

如果您需要添加文件,请运行git add {filename}或添加所有文件git add .。然后你可以运行 a git commit -m "message"来提交你的本地文件。

步骤 2) - 从远程获取您的分支

您可以使用 git fetch origin master. 如果您看到如下消息,您就可以开始了。

branch            master     -> FETCH_HEAD

请注意,origin 是存储库,master 是该存储库中的分支。

步骤 3 检查差异

现在您可以git diff --summary FETCH_HEAD git diff origin/master master --summary也可以看到您的更改。

于 2022-02-11T17:27:57.140 回答