远程存储库和本地存储库之间的‘ git diff’

在提交请求之前,我尝试使用 GitHub 存储库对本地文件进行 diff,这样我就可以看到将显示什么。有没有一个准确的方法来做这件事?

我假设 GitHub 的比较工具操作 Git 的 diff

69257 次浏览

不要做 pull:

  • 执行 fetch(语法与 git pull相同,但不会自动合并)
  • 在你的第一个分支和另一个分支之间做一个 diff
  • 然后做一个 merge,如果你想要的

根据观察员的意见,他的部分“问题是 Windows vs Unix LFs”,这应该有所帮助:

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

git config --global core.whitespace cr-at-eol

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

  1. git fetch origin master
    这告诉 git 从远程名为“ source”的分支中获取名为“ 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/someproject作为 https://github.com/theoriginal/someproject的分支。按照惯例,您可以将遥控器命名为原始回购 upstream,而您自己的分支机构将命名为 origin。如果您在 GitHub 上对 fork 进行更改并希望在本地获取这些更改,那么可以使用 git fetch origin master。如果 upstream进行了更改,需要在进行更多更改之前在本地进行同步,则应使用 git fetch upstream master

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

其中 my_topic_branch是您的主题分支。

例子 主要起源/主要

重要的是要记住: Git diff 将显示两个提交分支(远程或本地)之间的区别。

步骤1)-在本地提交

因此,要做的第一步是确保已经提交了本地存储库。您可以运行 git status来查看是否有任何文件剩余。

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

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

你可以使用 git fetch origin master来获取你的遥控器。如果你看到如下的信息,你就可以开始了。

branch            master     -> FETCH_HEAD

注意,原点是存储库,master 是其中的分支 那个仓库。

第三步检查差异

现在你可以看到 git diff --summary FETCH_HEAD或者 git diff origin/master master --summary的变化。

我只是有一个相关的问题,我想得到一个 GitHub PR 的变化快速概述之前合并它。

基本上我只对公关中的 添加、修改或删除了多少文件感兴趣。公共关系有成千上万的变化,这使得 GitHub 的网络用户界面毫无用处。

如果有人遇到类似的问题,可以在本地机器上尝试这样做:

  1. 如@HieroB 所建议的 git fetch origin branch。这将获取关于远程分支中最新更改的元数据,而无需在本地提取所有这些更改。

  2. git diff --name-status FETCH_HEAD > difflog.txt.Git 将创建在远程分支中更改的所有文件的列表,并将该列表保存到一个文件中。结果文件的结构如下:

    M  files/file1.json
    D  files/file2.json
    A  files/file3.json
    

    其中变更标记 M代表“修改”,D代表“删除”,而 A代表“添加”。在每一行中,其更改标记将用制表符从文件名分隔。

  3. 在文本编辑器中打开该文件,复制3个更改标记中的每一个及其相邻的制表符,并使用文本编辑器的 在文件中查找功能搜索标记的出现。