git 在子分支中合并父分支不起作用

git merge parent branch in child branch not working

我有父分支A和子分支B。 A 中的提交很少。

我尝试使用以下命令将我的 B 更新为 A。

git pull origin A

然后

git checkout A
git pull
git checkout B
git merge A

对于第一个命令,我遇到了合并冲突,我解决了这些冲突并推送了我的更改。 但是 A 的所有更改都没有反映在 B 中。

我尝试了第二个和第三个命令,得到的结果是 Already up to date.

如何使用 A 的所有更改更新 B

TL;DR 您的第一个操作完成了您在上一个操作中仍在尝试进行的合并。

详情

为了理解发生了什么,让我们用等效的两步命令替换 git pull:每次你 运行 git pull,你真正做的是 git fetch 其次是 git merge.

因此,在第 1 步中,您实际上做了:

git fetch origin
git merge A  #(almost, see below)

假设您当时在分支 B 上,您解决和提交的冲突将 A 合并到 B 中。

(#almost:它实际上是 git merge origin/A,但会创建一条默认提交消息,说明“合并 A”而不是“合并 origin/A”。在您的情况下,第 2 步确认 A 已经是最新的,所以这个细节不会有什么不同)

在第 2 步中,您有效地做到了

git checkout A
git fetch
git merge

现在默认情况下 git fetchorigin 获取,您已经在第 1 步中完成了。git mergeAlready up to date 只是意味着您的 A branch 当时已经与 origin 同步,因为默认情况下是将 origin/<my-current-branch> 合并到 <my-current-branch> 中,当您 运行 git merge (或 git pull)没有一个论点。

在第 3 步中,您刚刚尝试重做在第 1 步中已完成的合并:

git checkout B
git merge A

所以 B 相对于 A 已经是最新的也就不足为奇了。

正在检查您的提交图

当我试图弄清楚我的沙箱中发生了什么时,我总是使用一个工具来直观地显示我的整个提交图,包括所有分支。

这是一个简单的命令行,但所有可视提交图查看器都可以选择显示所有分支:

git log --graph --format=oneline --all --decorate

如果你运行在每次操作之后,事物的状态应该是相当明显的。

PS:我最喜欢的 git 日志命令实际上是这个,我在我的 .gitconfig:

git log --color --graph --all --format=format:"%Cred%ad %Cgreen%h %Cblue%an%Cred%d %Creset%s" --date=short