git - 如何恢复分支上的最后一次提交,与其他分支合并并重新添加提交?
问题描述
我有以下问题。一个 git repo 前一段时间被分叉了。从这个 fork 开始,进行了更改,但同时原始 repo 也被修改了很多,不知何故像这样:
A-B-C-D-E master
\[fork]
C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master
需要注意的是,fork 基本上解耦了 master 和 remote/master。现在的问题是,我可以从 remote/master 创建一个本地分支并将其直接与本地 master 分支合并。但是,这会带来很多我想避免的合并冲突,因为大多数这些冲突都与 B 之前的主软件包中的更改有关。所以我最终需要做的是进行最后几次提交自 fork 以来的 master 并将它们放在 remote/master 分支的顶部。那可能吗?
解决方案
如果有人提出这个问题,我通过以下程序解决了这个问题:
创建了一个仅包含所有提交 AE 的新分支,并从 master 的历史记录中删除了最新的提交 CE:
git checkout master git branch new_branch git reset --hard HEAD~5 C-D-E new_branch / A-B master \[fork] C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master
将 master 分支与 remote/master 合并,接受来自 remote/master 的所有更改:
git checkout remote/master git merge -Xours master C-D-E new_branch / A-B--------------------------- \[fork] \ C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master, master
签出 master 并使用 remote/master 执行 rebase
git checkout master git rebase remote/master A-B--------------------------- \[fork] \ C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master, master \ C-D-E new_branch
推荐阅读
- javascript - Firebase 错误 - 提供给 Query.startAt() 的参数过多
- python - 运行新的 cygwin shell 并在我想要的时候杀死它
- sql - 使用 WRDS MSRB 数据集上的 SQL 查询从许多 CUSIP 中检索数据
- flutter - 如果 body 为空,如何停止在 nestedScrollView 中滚动
- python - 了解路径/环境/streamlit
- django - 在 django 的同一页面上显示 3 个单独的表单
- flutter - 为什么图片不是每个时间段都变化?
- unity3d - 如何检查 Vector3 的 X 或 Y 分量是否增加或减少
- php - cakephp 创建一个会话变量,该变量可在不同的前缀 url 上访问
- python - 虚拟环境混乱