您展示的截屏具有“源”和“目标”分支的概念,并且有一个“创建拉取请求”按钮。
我不太熟悉Bitbucket GUI,但所有提供Pull Request机制的git服务(如Github、Gitlab(在Gitlab中称为“合并请求”)、Azure Devops等)都具有类似的视图:
显示的差异是:
- 如果您将“源”合并到“目标”中,则显示的更改列表。
这与以下情况不同:
- “源”和“目标”之间的所有差异。
以下是一张图解:
# say your branches 'master' and 'release/onemsg-uat1' look like this :
D--E--F <- release/onemsg-uat1 (source)
/
--*--X--A--B <- master (destination)
^
fork point, aka "merge base"
为了表示“源分支所带来的更改”,而不是查看
B
和
F
之间的完整差异,GUI会向您展示从
X
开始的更改:
a. 如果您打开一个拉取请求,将release/onemsg-uat1
(源)合并到master
(目标)中:要查看的更改是X
和F
之间的差异,
b. 如果您交换分支,并查看master
将带给release/onemsg-uat1
的内容:要查看的更改是X
和B
之间的差异。
在git
术语中,X
称为两个分支的“合并基础”,您可以使用git merge-base master release/onemsg-uat1
获取其sha1。
首先,从本地仓库查看这些差异的一种方法是:
# changes introduced in release/onemsg-uat1 :
git diff $(git merge-base master release/onemsg-uat1) release/onemsg-uat1
# changes introduced in master :
git diff $(git merge-base master release/onemsg-uat1) master
上述命令有一个快捷方式:三个点符号标记git diff a...b
git diff master...release/onemsg-uat1
git diff release/onemsg-uat1...master
要仅列出受影响的文件,请使用--name-only
或--name-status
:
git diff --name-only master...release/onemsg-uat1
git diff --name-status master...release/onemsg-uat1
要在图形化差异查看器中打开此差异,请使用
git difftool
:
# the following command will open the differing files one at a time :
git difftool master...release/onemsg-uat1
# with the '-d' option, you will view the diff of two complete directories :
git difftool -d master...release/onemsg-uat1
git diff
命令)?如果是这样,你可能应该标记Bitbucket;并且还可以查看一下在本地比较分支时是否会出现类似的“怪异”情况。但这似乎偏离了我对问题的猜测,所以我又回到了“可能需要更多信息”的状态。 - Mark Adelsberger