当代码提交然后在分支上恢复时,由于原始恢复,重新提交相同的代码将不起作用。例如,假设您在 branch 上有一个或多个提交B,并且您使用 commit 还原它们R:
master
|
* R
|\
| * B
Run Code Online (Sandbox Code Playgroud)
B再次合并到 master 将没有效果,因为 git 意识到在所有提交之后R发生了恢复(即使再次合并)。BB
这里有 2 种可能的解决方案。
一种是还原还原(称为此 commit R')。
master
|
* R'
|
* R
|\
| * B
Run Code Online (Sandbox Code Playgroud)
这个命令很简单。 $ git revert R
另一种可能的解决方案是重订整支B,这样说到后的复归R(称之为重建基础分支B')。这有一些不同的变体,但它们都依赖于用R.
master
|
* New merge commit
|\
| * B'
| \
| ...
* R
|\
| * B
| ...
|/
* A
Run Code Online (Sandbox Code Playgroud)
rebase的命令如下:
$ git checkout B
$ git rebase --no-ff A
Run Code Online (Sandbox Code Playgroud)
Linus对这个场景有一些很好的评论以供更多阅读。