【发布时间】:2014-04-11 04:24:51
【问题描述】:
我的一个同事从一个git分支跑了
git diff origin master
它应该做什么? origin分别指向什么?
这是相关的,但未包含在 In Git, what is the difference between origin/master vs origin master?
【问题讨论】:
我的一个同事从一个git分支跑了
git diff origin master
它应该做什么? origin分别指向什么?
这是相关的,但未包含在 In Git, what is the difference between origin/master vs origin master?
【问题讨论】:
相当于
git diff origin/HEAD master
【讨论】:
git diff 的这种形式只需要两个修订说明符,如 gitrevisions 中所述。
在这种情况下,origin 最有可能匹配第 6 项:
- 否则,
refs/remotes/<refname>/HEAD如果存在。
所以这与git diff origin/HEAD master 的含义相同:将origin/HEAD 解析为commit-ID,将master 解析为commit-ID,然后区分两个提交。
运行:
git rev-parse origin
看看分辨率是如何工作的。
【讨论】:
fetch是强制性的吗?还是它已经进入远程存储库并检查......?
git fetch,但如果你不这样做,你的Git正在使用从last fetch(或者可能由以前的 git push 更新)。如果你认为自从你的 Git 上次与远程对话以来,新的提交可能已经出现在远程,并且你想查看这些提交,现在运行 git fetch 让你的 Git 现在与他们的对话。然后,任何时候,使用origin/<name> 来引用这个最新的git fetch 保存的信息。
git fetch 可能是最简单、最简单的方法。您可以使用git ls-remote 来完成获取的第一步(获取名称和哈希 ID),但如果他们确实有新的提交,那么您可能无论如何都想要新的提交。请注意,当您从他们那里得到答案时,您的答案可能已经过时了:例如,假设数据包需要 2 秒才能到达您的机器,所以您获取并且他们说他们的 master 是 a123456。该信息至少存在两秒钟:有人可能在一秒钟前进行了推送!
git fetch 是明智的,但不要指望你的信息是最新的,不管你是多久获得的,除非你有更大的周边协议。这是任何分布式系统中的一个基本问题:您在本地拥有的信息可能与他们(无论他们是谁)在本地拥有的信息不匹配。您必须以其他方式构建原子性,例如,使用比较和交换请求(“我认为您认为 A=3,如果是这样设置 A=4,无论如何,让我知道您做了什么”)或租约( “告诉我 A,30 秒内不要更改它”)。
这取决于...如果origin 和master 是分支,它显示了它们之间的区别。查看解释时,他们通常使用origin 代表原始(上游、官方等)分支,master 代表您正在处理的分支。即,“告诉我与原始版本相比发生了什么变化。”
【讨论】:
它显示了 origin/HEAD 的提示和 master 分支之间的变化。 您可以使用以下命令实现相同的目的:
通常 origin 指向您克隆存储库的源。
【讨论】:
“origin”指向“远程”,通常是您克隆存储库的位置, 见
$ git remote -v show
但特别是在回答您的问题时,“git diff origin master”是等效的。对此:
$ git diff origin/HEAD master
origin/HEAD 指向遥控器上 HEAD 引用指向的分支。上次拉取时哪个是签出的分支。
看看你的提交图,它会告诉你所有引用在哪里(--decorate)
$ git log --oneline --graph --all --decorate
【讨论】: