我正在尝试将一个分支上的单个文件与另一个分支上的相同文件进行比较。我一直在参考类似问题的答案,但是我什么也做不了,我已经在两个不同的系统上使用不同版本的git尝试了这一点。在每个系统上我都会遇到不同的故障。
我有一个问题,就是我要比较的分支看起来像修订版号。分支名称为“ 2.2.0”。
在一个运行git v2.17.0的系统上,我看到了:
% git diff -b 2.2.0 my-branch -- stuff.groovy
diff --git a/vars/stuff.groovy b/vars/stuff.groovy
new file mode 100644
index 0000000..c6a2073
--- /dev/null
+++ b/vars/stuff.groovy
@@ -0,0 +1,84 @@
这将继续显示文件的全部内容,每行前均带有“ +”,这很明显,因为它与“ / dev / null”进行了比较。我不知道为什么要这么做。
在另一个运行git v2.7.4的系统上,而不是其他输出上,我仅看到以下行:
fatal: bad revision '2.2.0'
我可以在使用JGit库而不是“ git”命令行的Eclipse中进行此比较,并且效果很好,显示出这些分支之间的一行是不同的。
更新:
通过以下命令添加结果:
% git branch
2.2.0
* cart-checkout-customizations
master
% git tag
% git rev-parse --symbolic-full-name 2.2.0
refs/heads/2.2.0
更新:
添加其他命令的输出以进行诊断:
% git branch -a
2.2.0
* cart-checkout-customizations
master
remotes/origin/2.2.0
remotes/origin/bugfix/pr-issue
remotes/origin/cart-checkout-customizations
remotes/origin/dp5252/func_get_job_details_textgroovy-1560980842574
remotes/origin/dp5252/pl_idp_msgroovy-1560289622641
remotes/origin/dp5252/pl_idp_msgroovy-1560979038086
remotes/origin/dp5252/stage_build_docker_imagegroovy-1559338261549
remotes/origin/feature/2.2.0-temp
remotes/origin/feature/2.2.1
remotes/origin/feature/cfgrole-playbook
remotes/origin/feature/disable-concurrent-builds
remotes/origin/feature/hpa
remotes/origin/feature/hygieia
remotes/origin/feature/istio
remotes/origin/feature/notify-stash
remotes/origin/feature/profile-pipeline-id
remotes/origin/feature/sast
remotes/origin/feature/sast-swap
remotes/origin/feature/scrumboard-removal
remotes/origin/feature/smoke-test-fix
remotes/origin/feature/temp-investigation
remotes/origin/master
remotes/origin/trackingaudit
如果不明显,当前分支是“ cart-checkout-customizations”,这是我在其他地方引用的“ my-branch”。实际的文件名不是“ stuff.groovy”,但这没关系。
更新:
需要明确的是,@ ZachPosten提供的示例命令有效。我希望这为某人提供了有用的线索。它看起来确实确实像是导致git认为“ 2.2.0”不是分支,而是其他东西的原始命令。明确表示它是分支名称的形式(通过在其前面加上“ origin /”),使其以某种方式起作用。
答案 0 :(得分:1)
由于该文件不存在,为了使diff正常工作,需要有一个文件,因此使用empty file
/ dev / null。
您还可以尝试使用两个分支中最后一次提交的提交哈希...
您是否尝试过git diff 2.2.0..my-branch
?
来自git文档man git diff
比较分支
$ git diff topic master (1) $ git diff topic..master (2) $ git diff topic...master (3) 1. Changes between the tips of the topic and the master branches. 2. Same as above. 3. Changes that occurred on the master branch since when the topic branch was started off it.
答案 1 :(得分:0)
您确定您有本地分支机构2.2.0
吗?
也许尝试
git diff origin/2.2.0 origin/my-branch -- stuff.groovy
查看git branch -a
的输出有助于诊断。
更新:
我看到您确实有本地和远程2.2.0
分支。我的猜测是它们指向不同的提交,这就是为什么本地分支引用失败而远程引用成功的原因。
您可能还会在回购中存在另一个标识符2.2.0
。为了解决这个问题,您可以运行:
$ git show-ref 2.2.0
21787341c2e651b17d94375ecb1137b575a2099e refs/heads/2.2.0
21787341c2e651b17d94375ecb1137b575a2099e refs/remotes/up/2.2.0
a2d88e63057d7ae1484a90d36ee5b12fc78828cd refs/tags/2.2.0
在这里您可以看到我的存储库中有三个对2.2.0
的引用,一个本地分支(refs/heads
),一个远程分支(refs/remotes
)和一个标记({{ 1}})。分支指向相同的提交,但标签指向不同的提交。