git - 子分支中的git合并父分支不起作用
问题描述
我有父分支 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”而不是“合并原点/A”。在您的情况下,步骤 2 确认 A 已经是最新的,所以这个细节不会有任何区别)
在第 2 步中,您有效地做到了
git checkout A
git fetch
git merge
现在默认情况下git fetch
从 获取origin
,您已经在步骤 1 中完成了。这git merge
句话Already up to date
只是意味着您的 A 分支当时已经与 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 log 命令实际上是这个,我git loga
在我的.gitconfig
:
git log --color --graph --all --format=format:"%Cred%ad %Cgreen%h %Cblue%an%Cred%d %Creset%s" --date=short
推荐阅读
- rust - 生锈的浅拷贝和移动
- proxy - Artifactory Bower 解析器在某些 repos 上返回 404
- c# - 如何获得 mongoDB 双精度值的准确值
- google-cloud-platform - 如何识别脚本中的 gcloud 错误
- angular6 - Angular 6 https-proxy-agent,拒绝服务
- postgresql - Dockerizing 游戏框架
- google-app-engine - 如何从 App Engine 实例异步查询 GCP Search API?
- android - 在类路径上找不到 /javafx.platform.properties
- c++ - 未记录的链接器问题:“ld 返回 253 退出状态”
- java - 数组列表
元素浅拷贝