我有点难过。 Git似乎都在告诉我
其中一个是谎言(或者更可能的是,我误解了这种情况)。怎么了?
(~/hbb.vm) debian $ git diff ..stage/master --name-only
sites/all/libraries/attachment_email/attachment_email.php
sites/all/modules/redirect/redirect.module
sites/all/modules/redirect/redirect.test
sites/all/themes/HBB/css/elements.css
sites/all/themes/HBB/templates/node--enterprise_blog.tpl.php
(~/hbb.vm) debian $ git merge stage/master
Already up-to-date.
答案 0 :(得分:3)
merge命令告诉您当前分支包含所有分支
从stage/master
分支提交,但不是相反。可能就是这样
您当前的分支包含不在stage/master
中的更改
那些正在你的diff命令中反映的变化。
a-b----c
\
d--e
如果我已签出e
,则使用上述存储库,尝试合并b
将会
正确地说事情是最新的。但要求两者之间的差异
我目前的状态和同样的观点,很可能是差异
现在(不保证,e
可以恢复d
或e
和d
的更改
..
可能是空提交。
BTW,你的diff命令有点不正确。分支前面的HEAD..stage/master
name会导致将其解释为一系列提交(相当于
stage/master
),但diff对单个提交进行操作而不是
范围。这是一个有点常见的错误,因此差异调整到一定程度
允许它,但它仍然会产生误导性的结果。在这种情况下它会
显示与您可能期望显示所需更改的内容相反的更改
从当前状态转到stage/master
而不是更改
发生了将国家从{{1}}带到由国家反映的国家
您当前分支的提示。后者更可能是你的样子
期待。
答案 1 :(得分:1)
你在假设1时是正确的:你所在的位置(HEAD
)和stage/master
之间存在差异。
其中任何一个都告诉你:
git diff ..stage/master
git diff HEAD..stage/master
git diff stage/master..
git diff stage/master..HEAD
1是2的简写,3是4的3. 3只是1的反差。
@qqx提到的 git diff stage/master
将进一步告诉您工作树与stage/master
之间的任何差异。 (与1或3相比,您还会看到未提交的更改。)
您的想法不正确2:HEAD
和stage/master
之间没有差异。
相反,git merge stage/master
告诉您stage/master
中没有已提交(或合并到)HEAD
的提交。
这也可以告诉你:
git log ...stage/master --cherry-pick
这可能会告诉您在合并stage/master
后导致差异的提交:
git log stage/master... --cherry-pick