我有一个功能分支 A。然后我开始开发依赖于 A 的第二个功能,因此我将我的新功能分支 B 基于 A:
git checkout A
git checkout -B B
Run Code Online (Sandbox Code Playgroud)
我在 B 上做了一些工作,所以现在 BI 上有提交 1(来自 A)和新的提交 2。我们公司总是尽可能地将一个 PR 的所有提交压缩在一起,所以在某一时刻我强制推动 A这样 A 就只提交了 1'。现在我想将 B 变基为 A(或 master,在 A 合并后),但由于我强制推送了 A,git 尝试应用提交 1,这显然失败了。
有两种方法可以解决这个问题,但都不是很好:
使用 git Cherry-pick:
git checkout B
git checkout -B B2
git log // copy latest commit id
git checkout B
git reset --hard A
git cherry-pick <commit-id>
Run Code Online (Sandbox Code Playgroud)
使用软复位:
git checkout B
git reset --soft HEAD~1
git stash
git reset --hard A
git …Run Code Online (Sandbox Code Playgroud)