与远程标签比较的Git diff

11

我即将从一个远程分支(非 origin)合并一项大更改,并且更具体地说是从一个给定的标签。

然后有两个远程分支:

  1. origin
  2. proposal

proposal 远程分支上,存在一个名为 idea 的分支,带有一个名为 tagged_idea 的标签。

我的想法是要检查 tagged_idea 和当前 HEAD 之间的新更改,以便进行审核。我该如何实现这一目标?

我尝试了类似于 git diff .../proposal/tags/tagged_idea 的命令,但效果不佳。有什么建议吗?

换句话说,我想在自己的分支中进行合并之前,先看到合并的结果。就像执行 pull 命令 git pull proposal tags/tagged_idea,但实际上不进行更改。


如果没有任何更改,你想在哪里看到更改?至少我的工作流通常允许在本地副本中进行各种合并/更改/...,如果我不喜欢它,这很容易撤消。一旦我喜欢它了,它就会被推送到适当的远程位置。 - umläute
我想要一个类似于 diff 输出的东西。 - aspyct
那么“它没有运行良好”是什么意思? - umläute
大致相当于“根本没有起作用”。基本上,Git 没有接受该命令。 - aspyct
尝试运行 git diff tagged_idea 然后查看差异。 - umläute
我很确定我尝试过,但它没有起作用。现在它可以了,因为我拉取了更改,但之前我在本地存储库中没有标签,因此git找不到该标签(因此是“proposal/…”)。 - aspyct
3个回答

13

大多数 Git 命令只能在本地工作,特别是像git diffgit merge这样的命令。

你的本地仓库可以有多个远程仓库,但是在使用它们之前,你必须先将本地仓库与远程仓库同步:

 git fetch --all

尽管这将下载所有变更集,但它不会将它们应用于当前分支,除非当前分支正在跟踪其中一个远程分支。

一旦您下载了远程变更集和标签,您只需运行类似以下的命令即可:

git diff tagged_idea

...并查看您当前的HEAD和标记为tagged_idea的标签之间的差异,无论后者位于何处。


2
如果你使用 git fetch 而不是 git pull,你仍然会获取到所有新的提交记录,但是 git 不会尝试合并(或在 pull.rebase 和其他 git 配置设置中选择 rebase)这些更改,即使你在“跟踪”分支上。(如果你通常跟踪一个 force-pushed 远程分支并且使用 git pull --rebase 可以进行“智能”rebase 的自动rebase,则有一个小警告,但这是一个非常不寻常的工作流程。) - torek
当本地和远程标签具有相同的名称时,此方法无法正常工作。它只会与本地标签进行比较。 - ingyhere

3

我使用git ls-remote --tags proposal |grep tagged_idea获取修订版本哈希,然后使用哈希进行git diff


(注:该段内容涉及IT技术)

这是唯一对我有效的解决方案(由于名称与本地标签匹配,因此无法获取远程标签)。当然,差异的整个目的是查看是否存在任何差异以及它们来自哪里:进退两难 ;) - DylanYoung
哈希绝对标识了标签。使用 git show-ref --tags -d 查看本地和远程标签。如果与同名标签发生冲突,则应在本地名称后跟 ^{} - ingyhere

0
请勿只因为寻找命令而使用此解决方案,因为其主要意图是向您介绍解决方案的方法!
为了让生活变得更轻松 - 我编写了一个脚本git-cheat-sheet,其中包含一些有用的命令,包括以下内容:
./git_commands.sh -diff_tag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接