如何比较本地git分支与其远程分支?

时间:2009-11-25 23:58:17

标签: git

如何在本地分支和远程分支之间看到diff

23 个答案:

答案 0 :(得分:1251)

git diff <local branch> <remote>/<remote branch>

例如git diff master origin/mastergit diff featureA origin/next

当然要拥有所说的远程跟踪分支,首先需要git fetch;并且您需要它以获得有关远程存储库中分支的最新信息。

答案 1 :(得分:432)

要更新远程跟踪分支,您需要先键入git fetch,然后再输入:

git diff <masterbranch_path> <remotebranch_path>

您可以git branch -a列出所有分支(本地和远程),然后从列表中选择分支名称(只需从远程分支名称中删除remotes/

示例:git diff master origin/master(其中“master”是本地主分支,“origin / master”是远程,即origin和master分支。)

答案 2 :(得分:171)

第一种类型

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

答案 3 :(得分:99)

如果您在某个分支上,并且想要将其与您正在跟踪的上游分支进行比较,请使用

git diff @{upstream}

this answer提供,specifying revisions的git文档包含:

  

<branchname>@{upstream},例如master@{upstream}@{u}
  后缀   @{upstream}到分支机构(简称<branchname>@{u})是指   由branchname指定的分支设置为构建的分支   顶部(配置branch.<name>.remotebranch.<name>.merge)。   缺少branchname默认为当前的。{/ p>

答案 4 :(得分:43)

我更了解输出:

git diff <remote-tracking branch> <local branch>

告诉我将要删除的内容以及如果我推送本地分支将会添加什么。当然它是相同的,只是反过来,但对我来说更具可读性,我更容易看到将要发生的事情。

答案 5 :(得分:29)

简单方法:

git fetch
git log -p HEAD..FETCH_HEAD

这将首先从默认远程(原点)获取更改。克隆repo时会自动创建。您也可以明确:git fetch origin master

然后git log用于比较当前分支与刚刚获取的分支。 (-p(生成补丁)选项显示差异。)

答案 6 :(得分:11)

让您的工作分支开发并希望区分本地开发分支和远程开发分支,这种情况下,语法应该像git diff remotes/origin/development..development
                  或

git fetch origin git diff origin/development

答案 7 :(得分:11)

我就是这样做的。

#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 <branch_name>
#to check on which branch you are in, use
git branch
    (or)
git status

现在,您可以按如下方式检查差异。

git diff origin/<branch_name>

这将比较您的本地分支与远程分支

答案 8 :(得分:9)

如果您要将当前分支与您想要的内容git pull进行比较,这是一个速记答案。

git fetch
git diff FETCH_HEAD

第一个命令将确定哪个远程分支对应于当前分支。 FETCH_HEAD引用中该计算的工件。然后第二个命令使用该引用比较与当前分支的比较。

答案 9 :(得分:8)

如果您想查看差异只是更改文件的名称,请使用:

git diff --name-status <remote-branch> <local-branch>

否则这将显示所有差异两个分支:
git diff <remote-branch> <local-branch>

答案 10 :(得分:8)

tl; dr git diff <local branch> <remote branch>

在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-branchmaster)和4个远程(some-branchsome-other-branchmastermy-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
[ . . . ]

答案 11 :(得分:6)

我知道这个问题已有几个答案,但在尝试大部分问题时我遇到了一个奇怪的错误。

在我的情况下,我有一个名为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 fetch之前,解决方案明确提到git diff上的远程名称,在我的情况下:

$ git fetch heroku
$ git diff master heroku/master

希望能帮助其他人解决同样的问题。

答案 12 :(得分:4)

git difftool <commit> .

这会将您想要的提交与本地文件进行比较。不要忘记最后的点(对于本地)。

例如,要将本地文件与某些提交进行比较:

  

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341。

(除非需要与新的提交进行比较,否则你不需要git fetch)

答案 13 :(得分:3)

实施例

R> DT <- data.table(x=letters[1:3], y=1:9)
R> DT[1,2]
   y
1: 1
R> unlist(DT[1,2]) ## DF is a list of vectors, so start with `unlist)_`
y 
1 
R> unname(unlist(DT[1,2]))  ## an `unname()`
[1] 1
R> 

如果您使用的是像webstorm这样的编辑器,您可以右键单击文件选择与分支比较并输入/选择您的分支。

enter image description here

enter image description here

答案 14 :(得分:1)

在VS 2019中,只需抓取就不要提取代码。

这就是我所做的。 在.gitconfig文件中添加了以下内容,以便我可以使用Beyond Compare

File location: C:\Users\[username]\.gitconfig

添加到下方

[diff]
    tool = bc
[difftool "bc"]
    path = c:/Program Files/Beyond Compare 4/bcomp.exe

打开命令提示符,然后转到工作目录。我在下面给出了比较本地DEV分支与远程DEV分支的方法

git difftool dev origin/dev --dir-diff

这将打开“超越比较”并打开包含不同文件的目录。如果没有任何更改,将无法启动“超越比较”。

答案 15 :(得分:0)

设置

git config alias.udiff 'diff @{u}'

使用HEAD @ {upstream}

区分HEAD
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

答案 16 :(得分:0)

我想知道我的 master 分支是否有任何更改...

  1. 首先,您需要更改分支(如果您已经在该分支下,则无需执行此操作!)
  

git checkout master

  1. 您可以看到此命令在master分支下修改了哪个文件
  

git状态

  1. 列出分支机构
  

git branch -a

     
      
  • 主人
      遥控器/原点/主机
  •   
  1. 发现差异
  

git diff起源/母版

答案 17 :(得分:0)

这很简单。您可以使用:git diff remote/my_topic_branch my_topic_branch

my_topic_branch是您的主题分支。

答案 18 :(得分:0)

如果使用TortoiseGit(它为Git提供GUI),则可以右键单击Git存储库文件夹,然后单击Git Sync

如果未选择,则可以选择要比较的分支。比您可以查看差异提交。您也可以右键单击任何提交,然后Compare with previous revision并排查看差异。tortoise git sync to compare remote and local branch

答案 19 :(得分:0)

假设您已经将origin设置为远程存储库。然后,

git diff <local branch> <origin>/<remote branch name>

答案 20 :(得分:0)

在android studio中,可以使用图形界面查看分支之间的差异。选择您的远程分支,然后从列表中选择“与当前比较”。从那时起,您可以选择文件选项卡以查看两个分支之间是否存在内容有所不同的文件。如果看不到文件,则两个分支都是最新的。

答案 21 :(得分:0)

对于从HEAD到原始服务器/主服务器的不同提交的计数:

git remote update
git rev-list HEAD..origin/master --count

要获取当前的HEAD提交哈希ID:

git rev-parse HEAD

要获取远程源/主提交哈希ID:

git rev-parse origin/master

答案 22 :(得分:-1)

尝试:

git diff origin HEAD

假设您想将当前本地分支的HEAD与原点进行比较。 并假设您在本地分支机构中。 :)