我用过另一种方式几次。事实上,它是一本手册git rebase -i
,当您想要重新安排多个提交(包括压缩或拆分其中一些提交)时,它很有用。主要优点是您不必一次决定每个提交的命运。在此过程中,您还将拥有所有可用的 Git 功能,这与变基期间不同。例如,您可以随时显示原始历史记录和重写历史记录的日志,甚至可以进行另一个 rebase!
我将通过以下方式引用提交,因此它很容易阅读:
C # good commit after a bad one
B # bad commit
A # good commit before a bad one
你一开始的历史是这样的:
x - A - B - C
| |
| master
|
origin/master
我们将以这种方式重新创建它:
x - A - B*- C'
| |
| master
|
origin/master
程序
git checkout B # get working-tree to the state of commit B
git reset --soft A # tell Git that we are working before commit B
git checkout -b rewrite-history # switch to a new branch for alternative history
git add
现在使用(git add -i
等)改进您的旧提交git stash
。您甚至可以将旧提交拆分为两个或更多。
git commit # recreate commit B (result = B*)
git cherry-pick C # copy C to our new branch (result = C')
中间结果:
x - A - B - C
| \ |
| \ master
| \
| B*- C'
| |
| rewrite-history
|
origin/master
让我们结束:
git checkout master
git reset --hard rewrite-history # make this branch master
或者只使用一个命令:
git branch -f master # make this place the new tip of the master branch
就是这样,你现在可以push
进步了。
最后一个任务是删除临时分支:
git branch -d rewrite-history