为什么分支报告为未合并,尽管它已合并

时间:2016-11-14 15:27:59

标签: git merge git-branch git-merge

我有分支,该分支的所有更改都在主(HEAD)。但是git diff master...feature/5492_new_currency告诉我它不是。我哪里错了?

$ git diff master...feature/5492_new_currency
diff --git a/app/locale/ru/LC_MESSAGES/lang.po b/app/locale/ru/LC_MESSAGES/lang.po
index 9274c9e..6b9d1ae 100644
--- a/app/locale/ru/LC_MESSAGES/lang.po
+++ b/app/locale/ru/LC_MESSAGES/lang.po
@@ -4531,6 +4531,10 @@ msgstr "$"
 msgid "currency:UZS"
 msgstr "сум."

+# Британский фунт
+msgid "currency:GBP"
+msgstr "£"
+
 msgid "datepicker:prevText"
 msgstr "Пред>"

diff --git a/app/protos/defaults.ini b/app/protos/defaults.ini
index 4742982..4de9ea3 100644
--- a/app/protos/defaults.ini
+++ b/app/protos/defaults.ini
@@ -2,8 +2,8 @@ BASE_DOMAIN                = xxxxx
 INSTANCE_COUNTRY           = ru
 INSTANCE_LANGS             = ru en
 DEFAULT_LANGUAGE           = ru
-# Доступные валюты стран для магазинов: РФ, США, Евро, Казахстан, Украина, Китай, Молдова, Армения,
-INSTANCE_CURRENCY          = RUB USD EUR KZT UAH CNY MDL AMD UZS AZN KGS TJS TMT GEL LVL LTL
+# Доступные валюты стран для магазинов: РФ, США, Евро, Казахстан, Украина, Китай, Молдова, Армения,
+INSTANCE_CURRENCY          = RUB USD EUR KZT UAH CNY MDL AMD UZS AZN KGS TJS TMT GEL LVL LTL GBP

 MAIL_FROM         = xxxxx
 MAIL_FEEDBACK     = xxxxx
kes@backend01:~/site/app$ git branch
  feature/5492_new_currency
* master
  production
kes@backend01:~/site/app$ cat locale/ru/LC_MESSAGES/lang.po | grep -A 5 -B 5 'msgid "currency:GBP"'
# Узбекистан
msgid "currency:UZS"
msgstr "сум."

# Британский фунт
msgid "currency:GBP"
msgstr "£"

msgid "datepicker:prevText"
msgstr "Пред>"

kes@backend01:~/site/app$ git branch -d feature/5492_new_currency
warning: deleting branch 'feature/5492_new_currency' that has been merged to
         'refs/remotes/origin/feature/5492_new_currency', but not yet merged to HEAD.
Deleted branch feature/5492_new_currency (was ab38009).

3 个答案:

答案 0 :(得分:1)

您是否尝试git fetch查看回购已更新?您可能没有在计算机上更新它。

在网上查看您的回购。如果它将您的分支显示为已合并,则为。如果是,则强制将更新推送到Github桌面。

希望这有帮助!

答案 1 :(得分:1)

  

git diff master...feature/5492_new_currency [显示一些差异]

三点语法A...B在Git中具有特殊含义。更确切地说,它具有两个特殊含义,一个专用于git diff。 (在其他Git命令中,它具有其他特殊含义。)对于git diff(和用于git diff),A...B表示:

  • 首先,运行git merge-base --all A B。将其输出ID保存在变量let中,调用此$base。 (在shell脚本中,您可以编写base=$(git merge-base --all A B)然后echo $base来查看是否只有一个ID。)
  • 然后,只要输出一个提交ID,选择一个提交ID,然后运行:git diff $base B。否则会产生一些无用的输出。 (这个“其他”部分是一个错误。它实际上并没有发生,因为你会在标题中看到diff --cc,所以我们知道实际上只有一个ID。)

由于A此处为masterB此处为feature/5492_new_currency,并且有一些差异输出,这告诉我:

git merge-base master feature/5492_new_currency

git rev-parse feature/5492_new_currency

会生成两个不同的ID。

这反过来暗示master不是feature/5492_new_currency的祖先。如果是,则masterfeature/5492_new_currency的合并基础将是与<{1}}相同的提交ID。

您的下一个命令及其结果实际上更直接提供信息:

feature/5492_new_currency

放在一起,这两个意味着你的主张:

  

我有分支,该分支的所有更改都在主(HEAD)

错了!特别是,第二个结果证明给定两个ID将由以下产生:

kes@backend01:~/site/app$ git branch -d feature/5492_new_currency
warning: deleting branch 'feature/5492_new_currency' that has been merged to
  'refs/remotes/origin/feature/5492_new_currency', but not yet merged to HEAD.
Deleted branch feature/5492_new_currency (was ab38009).

git rev-parse HEAD

来自前者的ID不是“小于或等于”来自后者的ID,即git rev-parse feature/5492_new_currency 不是HEAD的祖先。假设feature/5492_new_currency实际上是对HEAD的引用,那反过来意味着master不是master的祖先,正如我们从第一个命令中看到的那样。它可能是“大于”(即,超前),但如果是这种情况,feature/5492_new_currency会将git diff与自身进行比较。因此feature/5492_new_currency肯定合并到feature/5492_new_currency。它推到了它的上游(它的上游是master)。也就是说,名称origin/5492_new_currency中的ID“小于或等于”您仍然可以从feature/5492_new_currency获取的ID。

现在您的分支名称origin/5492_new_currency已被删除,您必须使用feature/5492_new_currency以外的其他名称对您的本地名称master进行任何操作。最直截了当的可能是:

feature/5492_new_currency

将快进$ git checkout master && git merge origin/5492_new_currency ,或进行新的合并提交。 (要强制执行新的合并提交,即使可以快进,请使用master。)

答案 2 :(得分:0)

我们发现了什么问题:

有人只是cherry-pick对主分支的更改。

因此,尽管变化相同,但分支不在master