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

↘锁芯ラ 提交于 2019-12-15 14:27:11

如何查看本地分支和远程分支之间的diff


#1楼

第一种

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

#2楼

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

git diff <masterbranch_path> <remotebranch_path>

你可以git branch -a列出所有分支机构(本地和远程)然后选择分支的名字从名单(只是删除remotes/远程分支的名字。

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


#3楼

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

例如git diff master origin/master ,或git diff featureA origin/next

当然, 曾经说过,你需要远程跟踪分支 git fetch第一; 并且您需要它以获得有关远程存储库中分支的最新信息。


#4楼

简单的方法:

git fetch
git log -p HEAD..FETCH_HEAD

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

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


#5楼

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

git fetch origin git diff origin/development


#6楼

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

git diff @{upstream}

由于这个答案 ,用于指定修订的git文档具有:

<branchname>@{upstream} ,例如master@{upstream}@{u}
对于branchname的后缀@{upstream} (简短形式<branchname>@{u} )是指由branchname指定的分支设置为在其上构建的branch.<name>.remote (使用branch.<name>.remotebranch.<name>.merge )。 缺少的branchname默认为当前的。


#7楼

如果你想看到区别只是改变了文件的名称,那么使用:

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

否则这将显示两个分支之间的所有差异:

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


#8楼

我就是这样做的。

#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>

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


#9楼

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

在我的情况下,我有一个名为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

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


#10楼

git diff 'master' 'testlocalBranch'

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


#11楼

如果您要比较当前分支和想要git pull这是一个速记答案。

git fetch
git diff FETCH_HEAD

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


#12楼

git difftool <commit> .

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

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

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341。

(并且您不需要git fetch,除非需要与新提交进行比较)


#13楼

tl; drgit 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
[ . . . ]

#14楼

建立

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


#15楼

我想知道我的分支是否有任何变化......

  1. 首先,你需要改变你的分支(如果你已经在这个分支下,你不需要这样做!)

git checkout master

  1. 您可以通过此命令查看在主分支下已修改的文件

git状态

  1. 列出分支机构

git branch -a


  • 遥控器/来源/主
  1. 找出差异

git diff origin / master


#16楼

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

my_topic_branch是您的主题分支。


#17楼

我更了解输出:

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

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


#18楼

如果您使用TortoiseGit (它为Git提供GUI),您可以右键单击您的Git repo文件夹,然后单击Git Sync

如果未选择,您可以选择要比较的分支。 比你可以查看差异提交。 您也可以右键单击任何提交,然后Compare with previous revision进行Compare with previous revision并排查看差异。


#19楼

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!