如何查看本地分支和远程分支之间的diff
?
第一种
git branch -a
获取可用分支列表。 在输出上你可能会看到类似的东西
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
然后显示差异
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
要更新远程跟踪分支,您需要先键入git fetch
然后:
git diff
你可以git branch -a
列出所有分支机构(本地和远程)然后选择分支的名字从名单(只是删除remotes/
远程分支的名字。
示例: git diff master origin/master
(其中“master”是本地主分支,“origin / master”是远程,即origin和master分支。)
git diff /
例如git diff master origin/master
,或git diff featureA origin/next
当然, 曾经说过,你需要远程跟踪分支 git fetch
第一; 并且您需要它以获得有关远程存储库中分支的最新信息。
简单的方法:
git fetch
git log -p HEAD..FETCH_HEAD
这将首先从默认远程(原点)获取更改。 克隆repo时会自动创建。 你也可以是显式的: git fetch origin master
。
然后git log用于比较当前分支与刚刚获取的分支。 ( -p
(生成补丁)选项显示了差异 。)
让你的工作分支开发,并希望区分本地开发分支和远程开发分支,那种情况下,语法应该像git diff remotes/origin/development..development
要么
git fetch origin git diff origin/development
如果您在某个分支上,并且想要将其与您正在跟踪的上游分支进行比较,请使用
git diff @{upstream}
由于这个答案 ,用于指定修订的git文档具有:
,例如
@{upstream} master@{upstream}
,@{u}
对于branchname的后缀@{upstream}
(简短形式)是指由
@{u} branchname
指定的分支设置为在其上构建的branch.
(使用.remote branch.
和.remote branch.
)。 缺少的.merge branchname
默认为当前的。
如果你想看到区别只是改变了文件的名称,那么使用: git diff --name-status
,
否则这将显示两个分支之间的所有差异: git diff
我就是这样做的。
#To update your local.
git fetch --all
这将从远程获取所有内容,因此当您检查差异时,它将比较远程分支的差异。
#to list all branches
git branch -a
上面的命令将显示所有分支。
#to go to the branch you want to check difference
git checkout
#to check on which branch you are in, use
git branch
(or)
git status
现在,您可以按如下方式检查差异。
git diff origin/
这将比较您的本地分支与远程分支
我知道这个问题已经有几个答案,但我在尝试大部分问题时遇到了一个奇怪的错误。
在我的情况下,我有一个名为heroku
的第二个遥控器,它不是 origin
,因为它不同步我在尝试运行git diff master heroku/master
时遇到了这个错误:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
或尝试其他方法git diff master..heroku/master
:
fatal: bad revision 'master..heroku/master'
在我的情况下,解决方案在运行git diff
之前明确提到了git fetch
上的远程名称:
$ git fetch heroku
$ git diff master heroku/master
希望能帮助其他人解决同样的问题。
例
git diff 'master' 'testlocalBranch'
如果你使用像webstorm这样的编辑器,你可以右键单击文件选择与分支比较并输入/选择你的分支。
如果您要比较当前分支和想要git pull
这是一个速记答案。
git fetch
git diff FETCH_HEAD
第一个命令将确定哪个远程分支对应于当前分支。 FETCH_HEAD
参考中的计算工件。 然后第二个命令使用该引用比较与当前分支的比较。
git difftool .
这将比较您想要的提交与本地文件。 不要忘记最后的点(对于本地)。
例如,要将本地文件与某些提交进行比较:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341。
(并且您不需要git fetch,除非需要与新提交进行比较)
tl; dr : git diff
在shell上使用git时,我喜欢首先通过环顾四周定位自己。 这是显示所有分支的命令
$ git branch -a # (or git branch --all)
* my-branch
master
remotes/origin/some-branch
remotes/origin/HEAD -> origin/master
remotes/origin/my-branch
remotes/origin/some-other-branch
remotes/origin/master
这里我有两个本地分支( my-branch
和master
)和4个远程( some-branch
, some-other-branch
, master
和my-branch
)。
此外, my-branch
旁边的星号表示我当前正在该分支中(您还可以通过使用将输出的命令git status
来知道: On branch my-branch.
)。
注意:git bash shell中的远程分支显示为红色,而本地显示为绿色。
如果您只想显示远程分支 :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
要显示本地分支,您可能会尝试使用git branch -l
但这是一个完全不同的命令。 要显示本地分支,请使用没有选项的git branch
$ git branch
* my-branch
master
要完成的基本分支选项的审核还有的--list
是违背你可能期望有什么好让过滤 。 使用这样的模式:
$ git branch --list 'my*'
* my-branch
您还可以将--list
与选项-a
和-r
结合使用,但请确保相应地调整您的模式( 请记住:远程分支以“遥控器”开头 )。 例:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
文档: https : //git-scm.com/docs/git-branch
现在你可以比较所有可用的两个分支 (你也可以比较两个本地或两个遥控器)。
在这里我将本地与远程my-branch
进行比较,它们是同步的,所以我没有得到任何输出:
$ git diff my-branch remotes/origin/my-branch
注意:您必须提供没有引号的分支的全名。
我还可以比较本地my-branch
和远程master
。 这里我得到一些输出,因为远程my-branch
尚未合并到主分支中。
$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
/*
* Function: doCall
[ . . . ]
git config alias.udiff 'diff @{u}'
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
这回答了你标题中的问题(“遥远的”); 如果要对“远程”(未配置为分支的上游)进行区分,则需要直接对其进行定位。 您可以使用以下内容查看所有远程分支:
git branch -r
您可以使用以下命令查看所有已配置的遥控器:
git remote show
您可以看到单个遥控器(例如原点)的分支/跟踪配置,如下所示:
git remote show origin
一旦确定了合适的原点分支,就做一个正常的差异:)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
我想知道我的主分支是否有任何变化......
git checkout master
git状态
git branch -a
- 主
遥控器/来源/主
git diff origin / master
这很简单。 您可以使用: git diff remote/my_topic_branch my_topic_branch
my_topic_branch
是您的主题分支。
我更了解输出:
git diff
这告诉我什么将被删除,如果我推动本地分支将会添加什么。 当然它是相同的,只是反过来,但对我来说更具可读性,我更容易看到将要发生的事情。
如果您使用TortoiseGit (它为Git提供GUI),您可以右键单击您的Git repo文件夹,然后单击Git Sync
。
如果未选择,您可以选择要比较的分支。 比你可以查看差异提交。 您也可以右键单击任何提交,然后Compare with previous revision
进行Compare with previous revision
并排查看差异。
假设您已将origin
设置为远程存储库。 然后,
git diff