我有父分支A和子分支B。There are few commits in 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
,但创建了一个默认的提交消息说"合并"而不是"合并起源"。在您的例子中,步骤2确认A已经是最新的,所以这个细节没有什么区别)
在步骤2中,您有效地执行了
git checkout A
git fetch
git merge
现在默认情况下,git fetch
从origin
中获取,这在步骤1中已经完成了。git merge
说Already up to date
只是意味着你的A分支在当时已经是最新的,因为当你运行git merge
(或git pull
)而不带参数时,默认情况是将origin/<my-current-branch>
合并到<my-current-branch>
中。
在步骤3中,您只是试图重做您在步骤1中已经完成的合并:
git checkout B
git merge A
所以B已经是a的最新版本也就不足为奇了
查看提交图
当我试图弄清楚沙箱中发生了什么时,我总是使用一个工具,它可以直观地显示我的整个提交图,包括所有分支。
这是一个简单的命令行,但是所有的可视化提交图查看器都有显示所有分支的选项:
git log --graph --format=oneline --all --decorate
如果在每个操作之后运行该语句,那么事情的状态应该是相当明显的。
p我最喜欢的git日志命令实际上是这个,我在.gitconfig
中将其别名为git loga
:
git log --color --graph --all --format=format:"%Cred%ad %Cgreen%h %Cblue%an%Cred%d %Creset%s" --date=short