Git:git diff 显示更改,但合并说已经是最新的了?

3

我有两个分支:master和other。我把other合并到了master中,但由于某些原因,一个提交的源代码没有改变。

我可以通过运行git log在master中看到这些提交,但实际的源代码没有改变。在other分支中有新的更改,但master没有。

所以运行:

git diff master..other dir_name

展示给我这个:

--- a/dir_name/views/purchase_order_report.xml
+++ b/dir_name/views/purchase_order_report.xml
@@ -60,9 +60,9 @@
                     <span t-field="o.partner_id.name"/>
                     <div t-field="o.partner_id"
                         t-field-options='{"widget": "contact", "fields": ["address"], "no_marker": true}'/>
-                    <t t-if="o.partner_id.child_ids.search([('type', '=', 'invoice')])">
+                    <t t-if="o.partner_id.child_ids.filtered(lambda r: r.type == 'invoice')">
                         <span>Attn: 
-                            <span t-esc="o.partner_id.child_ids.search([('type', '=', 'invoice')])[0].name"/>
+                            <span t-esc="o.partner_id.child_ids.filtered(lambda r: r.type == 'invoice')[0].name"/>
                         </span>
                     </t>
                 </div>

+行应该也在主分支中,但由于某些原因却没有。

执行如下操作:

git checkout master
git merge other
Already up-to-date.

看起来有些混乱。

更新。我还从master分支挑选了一些提交到other分支。也许这也导致了一些问题?

2个回答

0

我的直觉告诉我,master 中有一些提交不在 other 中。git-merge 合并实际的提交 - 你拥有不同的文件并不意味着它们没有被合并。

尝试运行:

git checkout other
git merge master

查看文件是否已更改。如果是的话,那么它正是由于我上面所描述的原因。

编辑:如果您只想在other中为此文件使用master中的更改,则可以查找在master上更改文件的提交并将它们挑选出来(搜索git cherry-pick - 请注意,这会引入整个提交,这可能不符合您的要求),或者手动应用它们。无法通过合并获得“仅此文件”。


是的,与其他分支不同的更改在主分支中存在。但我还不想在“其他”分支中使用这些更改。这样做的目的是,主分支用于拥有所有更改。而“其他”是从稳定分支衍生出来的分支,稍微落后于“主”分支(换句话说,我现在从稳定分支衍生出来的分支中开发功能/修复)。也许这个逻辑有点混乱,但这就是我现在拥有的 :) - Andrius
不,我需要相反的。有其他分支的更改,尽管我已经合并并在主分支中看到了该提交,但这些更改并没有应用到主分支上... - Andrius
你是否偶然将 other 合并到 master,然后撤销了合并提交? - CptBartender
我可能以前做过这件事,但后来我又合并了它,而且合并得很好。 - Andrius
这不是合并的工作方式。合并确保提交(而不是更改)可用。如果您进行合并,然后推送一个还原提交,则设置内容的提交将被合并,因此在未来的合并中不会重新应用这些提交。 - CptBartender

0
尝试使用git cherry master other命令,该命令会输出'+'或'-',后跟已经在other历史记录中但尚未合并到master的提交SHA1。您可以忽略'-'行,专注于'+'行。'-'表示master尚未合并提交,但已经有了等效的补丁(通过git am、git cherry-pick或git rebase应用)。'+'表示master尚未合并提交,并且没有等效的补丁。

然后使用git log other -- dir_name命令查看输出中是否有任何'+'提交SHA1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接