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 fetch
从 origin
获取,您已经在第 1 步中完成了。git merge
说 Already 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
我有父分支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 fetch
从 origin
获取,您已经在第 1 步中完成了。git merge
说 Already 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