Git显示文件中的差异,但不会合并它们

时间:2013-07-30 19:04:38

标签: git merge diff

我有点难过。 Git似乎都在告诉我

  1. 我当前的分支和远程分支之间存在差异,
  2. 我当前的分支与远程分支之间没有区别
  3. 其中一个是谎言(或者更可能的是,我误解了这种情况)。怎么了?

    (~/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.
    

2 个答案:

答案 0 :(得分:3)

merge命令告诉您当前分支包含所有分支 从stage/master分支提交,但不是相反。可能就是这样 您当前的分支包含不在stage/master中的更改 那些正在你的diff命令中反映的变化。

 a-b----c
    \
     d--e

如果我已签出e,则使用上述存储库,尝试合并b将会 正确地说事情是最新的。但要求两者之间的差异 我目前的状态和同样的观点,很可能是差异 现在(不保证,e可以恢复ded的更改 ..可能是空提交。

BTW,你的diff命令有点不正确。分支前面的HEAD..stage/master name会导致将其解释为一系列提交(相当于 stage/master),但diff对单个提交进行操作而不是 范围。这是一个有点常见的错误,因此差异调整到一定程度 允许它,但它仍然会产生误导性的结果。在这种情况下它会 显示与您可能期望显示所需更改的内容相反的更改 从当前状态转到stage/master而不是更改 发生了将国家从{{1}}带到由国家反映的国家 您当前分支的提示。后者更可能是你的样子 期待。

答案 1 :(得分:1)

你在假设1时是正确的:你所在的位置(HEAD)和stage/master之间存在差异。

其中任何一个都告诉你:

  1. git diff ..stage/master
  2. git diff HEAD..stage/master
  3. git diff stage/master..
  4. git diff stage/master..HEAD
  5. 1是2的简写,3是4的3. 3只是1的反差。

    @qqx提到的

    git diff stage/master将进一步告诉您工作树与stage/master之间的任何差异。 (与1或3相比,您还会看到未提交的更改。)

    您的想法不正确2:HEADstage/master之间没有差异。

    相反,git merge stage/master告诉您stage/master中没有已提交(或合并到)HEAD的提交。

    这也可以告诉你:

    • git log ...stage/master --cherry-pick

    这可能会告诉您在合并stage/master后导致差异的提交:

    • git log stage/master... --cherry-pick