- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想检查远程分支和本地分支之间的真正差异。我该怎么做?
发出以下命令部分有效,但它也显示了我本地分支的新更改的差异。
git diff remote/branch
最佳答案
由于这个话题经常出现,而且如果不了解 git 的工作原理可能会让人感到困惑,我想我会尝试解释最简单的情况,但要有足够的深度让新手有足够的把握它可以做更多的研究。
如果您通过普通的“克隆”设置您的 git 存储库并具有默认的 refspecs,这意味着您的远程名为“origin”并且您从分支“master”中 pull/获取,您有时可能需要查看是什么在将其 pull 下之前在远程存储库中。
因为“git pull”会自动 merge (除非有冲突),所以很高兴看到接下来“传入”的是什么。如果您不熟悉 git 的工作原理,尤其是 refspecs 的管理方式,这可能有点不直观。
假设有人在远程存储库中进行了更改(为了说明,通过提交更改并推送它向远程存储库添加一行),然后您键入:
$ git diff origin/master
您可能看不到任何变化;但是,如果您执行以下操作:
$ git fetch; git diff ..origin/master
您将看到提交到本地 git 存储库的内容与远程存储库中的内容之间的区别。您将看不到本地文件系统中或索引中暂存的任何更改。
好的,我们为什么要这样做? origin/master 是一个refspec(参见手册页)。简而言之,这就是我们为了比较、 pull 或获取以及推送而引用的内容。以下所有内容在功能上都是等效的:
origin/master
remotes/origin/master
refs/remotes/origin/master
要开始解决这个问题,只需看一下存储库的 .git 目录结构即可。典型的布局如下所示:
.git/refs
.git/refs/heads
.git/refs/heads/master
.git/refs/remotes
.git/refs/remotes/origin
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
.git/refs/tags
查看.git/refs/remotes/origin/HEAD;在默认情况下,它将指向您用来 pull 和推送的分支。就我而言,因为我是 master,所以这个文本文件的内容如下所示:
ref: refs/remotes/origin/master
这告诉我,我的 Remote 的 HEAD 由 refspec“refs/remotes/origin/master”(恰好具有上述别名)标识。
这并没有告诉我们太多;远程存储库的状态是什么?查看远程master的状态:
$ cat .git/refs/heads/master
6d0fb0adfdfa5af861931bb06d34100b349f1d63
好的,这是一个 SHA1 哈希;可能是一个 promise 。它是如何放入这个文件中的?好吧,无论何时进行 pull 或获取,此文件都会使用来自 pull 或获取的远程的最新提交进行更新。这解释了为什么我们必须在执行差异之前 git fetch
。请记住,git fetch
只是更新远程分支的本地副本,但不会将它与您的工作副本 merge 。这是完全安全的。一个 git fetch; git merge
等同于 git pull
。
一旦你执行了获取,git 将能够在远程中看到最近的提交获取时的存储库。
您可以根据需要使用 git 说明符的各种组合来查看差异(以下示例使用本地工作副本作为隐式首次提交):
$ git diff remote/origin
This shows the incoming remote additions as deletions; any additions in your local
repository are shown as additions.
$ git diff ...remote/origin
Shows incoming remote additions as additions; the triple-dot excludes changes
committed to your local repository.
$ git diff ..remote/origin
Shows incoming remote additions as additions; the double-dot includes changes
committed to your local repository as deletions (since they are not yet pushed).
有关“..”与“...”的信息,请参阅 git help diff
以及 git-scm revision selection: commit ranges 上的优秀文档简而言之,对于上面的示例,双点语法显示所有可从 origin/master 访问的提交,但不是您的工作副本。同样,三点语法显示可从任一提交(隐式工作副本、远程/源)访问的所有提交,但不能从两者访问。
我正在逐步完成这个过程,因为我对 git 还很陌生,而这正是让我感到困惑的事情......我相信 git 专家可以发现细节的缺陷...我只是希望这个答案能为那些发现所有各种帖子都有些简洁的人弥合差距。
关于git - 如何在从远程分支 merge 之前检查真实的 git diff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944376/
我在我们的系统中使用了多种不同的查询,我们想要获取分页的“总”记录。 我所遵循的所有地方都遵循这种结构 - var query1 = "select SQL_CALC_FOUND_ROWS ...."
我是 diff 的新手。我过去用过它。但我想知道,是否可以使用 diff 来跟踪希伯来语中两个文件之间的差异?我想比较具有元音点和重音符号的圣经希伯来文文件。 最佳答案 我不知道有任何“差异”(文件比
在Word中,有一个选项可以比较两个文档并找出两个文档之间的差异。我正在寻找一个类似的功能来比较两个Powerpoint文档。理想情况下,它将列出不同的单个幻灯片,每个幻灯片之间版本之间的差异以及进行
Bizzaro-Diff!!! 有没有办法做一个只显示一组文件中相同部分的 bizzaro/inverse-diff? (即远超过 three files ) 奇怪的问题,我知道...但我正在将某人的
我将 git 与默认的 Ubuntu 12.04 软件包一起使用: git --version git version 1.7.9.5 我找不到任何可以让 git diff 打开外部差异工具的机制,它
这是我的树 ├── test │ ├── dir1 │ └── dir2 │ ├── file │ └── file2 └── test2 └── dir2
我在 source forge ( cocoa.diff ) 上找到了这个补丁,这意味着我可以使用 cocoa.diff 文件进行补丁。但是,我似乎无法弄清楚如何使用 .diff 文件。 谢谢你的帮助
我修改了某个文件的第 494 行,并使用 cvs diff -u4 来查看我修改的内容,cvs 输出如下内容: @@ -490,9 +490,9 @@ if (!(hPtr->hSta
我需要知道这两个补丁是否有效相同。 我有一个旧补丁文件和使用 unix diff 命令创建的新补丁文件。由于补丁创建时的时间戳,只是比较补丁会报告差异。 有没有办法(有差异?)可以可靠地告诉我这两个补
我有这样的东西 src/sim/simulate.cc 41d40 public: > 61,62c60,61 a.patch 用于创建补丁文件,尽管也可能会抛出一些其他开关(-N?)
我想知道是否有工具可以显示与 debian 打包相关的补丁中使用的 *.diff 文件。我需要从该工具中获得的是它可以只读取 diff 文件并显示随更改的行更改的实际文件,就像 kdiff 或 mel
主要有3个git diff版本: git diff - difference between WORKING DIRECTORY & STAGE git diff --staged - differe
根据 Ender 的 Applied Econometric Time Series ,变量 y 的二阶差分定义为: Pandas 提供了 diff 函数,它接收“periods”作为参数。尽管如此,
这是我的差异的开始部分。 #!/usr/bin/env python import fileinput import difflib import subprocess import sys # fo
有没有办法在 svn diff 或任何其他工具(基于 linux)到 仅显示空格/制表符更改 ?. 目的,我不希望 checkin 这些差异。如果工具可以捕获这些差异,我可以在 checkin 之前将
我正在尝试比较忽略回车符的文件 - diff -b 在任何其他 unix 上的表现令人钦佩。但是在这个 AIX 5.3 机器上: tst1:tst2$ od -c testfile 00000
这个问题已经有答案了: What does the “@@…@@” meta line with at signs in svn diff or git diff mean? (3 个回答) 已关闭
我在使用 git diff --word-diff 时遇到了问题。问题是当 diff 获取没有换行符的文件(单行文件)时,它会逐行区分。我想逐字区分。 以下是当我在没有换行符的情况下比较文件时发生的情
这个问题在这里已经有了答案: Highlight changed lines and changed bytes in each changed line (12 个答案) 关闭 7 年前。 给定一
我正在尝试使用两个大文件夹(〜7GB)创建一个补丁。 这是我的做法: $ diff -Naurbw . ../other-folder > file.patch 但可能由于文件大小而导致未创建补丁并给
我是一名优秀的程序员,十分优秀!