How to compare a local git branch with its remote branch?
我怎样才能看到本地分支和远程分支之间的
1 | git diff <local branch> <remote>/<remote branch> |
例如
当然,要设置远程跟踪分支,首先需要
要更新远程跟踪分支,需要先键入
1 | git diff <masterbranch_path> <remotebranch_path> |
您可以使用
示例:
第一类
1 | git branch -a |
获取可用分支的列表。在输出上,您可能会看到
1 2 3 4 5 6 7 | * master remotes/main/master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/mt remotes/upstream/master remotes/upstream/mt |
然后显示差异
1 2 | git diff --stat --color remotes/main/master..origin/master git diff remotes/main/master..origin/master |
如果您在一个给定的分支上,并且您想将其与正在跟踪的上游分支进行比较,请使用
1 | git diff @{upstream} |
根据此答案,用于指定修订的Git文档具有:
, e.g. @{upstream} master@{upstream} ,@{u}
The suffix
@{upstream} to a branchname (short form) refers to @{u}
the branch that the branch specified bybranchname is set to build on
top of (configured withbranch. and.remote branch. )..merge
A missingbranchname defaults to the current one.
我更了解以下内容的输出:
这向我展示了如果我推动本地分支机构将要丢弃的内容和将要添加的内容。当然,它是相同的,只是相反的,但对我来说,它更易读,而且我更容易看到将要发生的事情。
简单的方法:
1 2 | git fetch git log -p HEAD..FETCH_HEAD |
这将首先从默认远程(源站)获取更改。这将在克隆回购时自动创建。你也可以明确地说:
然后使用git日志将当前分支与刚刚获取的分支进行比较。(
我就是这样做的。
1 2 | #To update your local. git fetch --all |
这将从远程获取所有内容,因此当您检查差异时,它会将差异与远程分支进行比较。
1 2 | #to list all branches git branch -a |
上面的命令将显示所有分支。
1 2 3 4 5 6 | #to go to the branch you want to check difference git checkout <branch_name> #to check on which branch you are in, use git branch (or) git status |
现在,您可以按如下方式检查差异。
1 | git diff origin/<branch_name> |
这将比较本地分支和远程分支
让您的工作分支正在开发中,并想区分本地开发分支和远程开发分支,这种情况下,语法应该类似于
git diff origin/development
tl;dr:
在外壳上使用Git时,我喜欢首先通过环顾四周来确定自己的方向。下面是显示所有分支的命令
1 2 3 4 5 6 7 8 | $ 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 |
这里我有两个本地分支机构(
另外,
注意:git bash shell中的远程分支显示为红色,而本地分支显示为绿色。
如果只想显示远程分支:
1 2 3 4 5 6 | $ git branch -r # (or git branch --remotes) origin/some-branch origin/HEAD -> origin/master origin/my-branch origin/some-other-branch origin/master |
为了只显示本地分支,您可能会尝试使用
1 2 3 | $ git branch * my-branch master |
为了完成对基本分支选项的审查,有一个
1 2 | $ git branch --list 'my*' * my-branch |
您还可以将
1 2 3 4 5 6 7 8 | # 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
现在可以比较所有可用分支中的任意两个分支(也可以比较两个本地分支或两个远程分支)。
这里我比较本地和远程
1 | $ git diff my-branch remotes/origin/my-branch |
注意:您必须给出没有引号的分支机构的全名。
我还可以将本地的
1 2 3 4 5 6 7 8 9 | $ 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 [ . . . ] |
如果您只想将差异视为更改的文件名,请使用:
<
否则,这将显示两个分支之间的所有差异:
下面是一个简短的答案,如果您正在比较您当前的分支和您想要的东西
1 2 | git fetch git diff FETCH_HEAD |
第一个命令将确定哪个远程分支对应于您的当前分支。在
我知道这个问题已经有好几个答案了,但是我在尝试其中大部分的时候遇到了一个奇怪的错误。
在我的例子中,我有一个名为
或者在尝试另一种方法
在运行
1 2 | $ git fetch heroku $ git diff master heroku/master |
希望这能帮助其他人解决同样的问题。
1 | git difftool <commit> . |
这将比较您想要的提交和本地文件。不要忘记结尾的圆点(对于本地)。
例如,要将本地文件与某些提交进行比较,请执行以下操作:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341 .
(而且您不需要git fetch,除非需要与新提交进行比较)
例子
1 | git diff 'master' 'testlocalBranch' |
如果您使用的是Webstorm之类的编辑器,则可以右键单击"文件",选择"与分支比较",然后键入/选择分支。
这很简单。您可以使用:
其中
安装程序
1 2 | 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 checkout master
git status
git branch -a
- master
remotes/origin/master
git diff origin/master