我在A分支上工作,而其他开发人员在B分支上工作。
我想将B分支中的所有内容都拉到A分支。我已经在本地克隆了这两个分支。
我在阅读某则SO帖子时做了什么:
git checkout branch B
git pull
git checkout branch A
git merge branch B
合并消息如下:
Auto-merging fileBar
Merge made by the 'recursive' strategy.
.../file | 92 ++++++++++++++++++----
file1 | 9 ++-
.../file2 | 2 +-
.../file3 | 6 +-
.../file4 | 4 +-
.../file5 | 2 +-
file6 | 2 +-
.../file7 | 4 +-
8 files changed, 91 insertions(+), 30 deletions(-)
但是,我原本希望解决一些合并冲突,但令我惊讶的是git没有为此大吼大叫。
所以我在这之后做了什么:
git status
这表明我本地没有任何变化,很奇怪吗?
然后我做了:
git log
其中显示:
Author: me <me@gmail.com>
Date: Mon Mar 18 14:47:00 2019 -0400
Merge branch 'B' into A
我还在分支A上尝试拉分支B:
git pull origin branchB
但它说它是最新的:
From https://github.com/myGit/myRepo
* branch BranchB -> FETCH_HEAD
Already up to date.
但是,当我登录到Git时,那些存储库在远程上显然是不同的。
在这一点上,我感到困惑。这里发生了什么?如何将分支B拉入分支A?
更新:我刚发现这样做的时候:
git checkout branch B
git pull
实际上未提取新的更改。当我做git pull时,它说它已经是最新的了,而显然不是。我的本地仍然有分支B的旧版本。如何?此时我对一切感到困惑
我尝试过的事情:
git fetch --all
git reset --hard origin/BranchB
这些都不起作用
答案 0 :(得分:0)
似乎一切正常。
git checkout branch B
git pull
git checkout branch A
git merge branch B
运行上述操作后,A
与B
合并了(您已通过git log
和git pull origin branchB
进行了确认)。
git status
正确显示工作树中没有暂存/未暂存的更改,所有更改都通过合并提交。
没有冲突的事实有点more complicated。您可能需要查看处理branches that depend on each other的方法。使用分支的最简单方法是在不相互依赖的孤立的“功能分支”上工作。准备就绪后,可以将分支合并到master
中,然后将master
拉到其他分支中以使它们保持最新。
在您git push
之前,不会更新远程分支机构(在GitHub上),这似乎还没有完成。
此外,您现在似乎已将A
重置为与B
(git reset --hard origin/BranchB
)相同,并可能丢失了您在A
上所做的任何工作。为了解决这个问题,请使用git reflog
查看您最近操作的历史记录,然后执行git reset --hard $REFLOG_HASH
,其中HASH是您进行合并的操作左侧的数字-这样您就可以{ {1}}您的工作树可以追溯到历史。然后,您可以使用reset
更新遥控器。