Git 自上次合并操作后变基
Git rebase since the last merge operation
让我们考虑一下我在单独的分支上处理特定功能的情况:
* 456789 bar (origin/master, origin/HEAD, master)
| * 3456789 foo (HEAD -> feature)
| * 2345678 Merge origin/master in feature
| |\
| |/
|/|
* | 1234567
前段时间我合并了 master
,但从那以后我在我的功能上做了 foo
,而有人在 master
上做了 bar
。
现在,我想在上次合并之前重新设置 bar
:
* 3456789 foo (HEAD -> feature)
* 2345678 Merge origin/master in feature
|\
| |
| |
* | 456789 bar (origin/master, origin/HEAD, master)
我尝试了 feature
中的 git rebase master
。问题是 Git 想要在 master 的顶部重播我的所有更改,这可能需要很多工作。
一个可能的解决方案是:
$ git checkout -b temp feature~3
$ git merge master
$ git cherry-pick foo -n2
$ git branch -D feature
$ git branch -m temp feature
$ git checkout feature
$ git branch -D temp
我相信有更简单的方法。
你在问题末尾描述的是一个很好的方法。
在这里你可以弄清楚发生了什么。
另一种选择是 sqaush
因为 squash 是一个 interactive rebase
,它允许您以任何方式修改您希望的任何提交。使用编辑命令,您可以在历史记录的任何给定点编辑和添加任何提交。
要进行 git 壁球,请按照以下步骤操作:
// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X
压缩提交后 - 选择 e
进行编辑并操作所需的提交。
如果您希望保持提交不变,那么您应该使用您在 git cherry-pick
中提出的建议
让我们考虑一下我在单独的分支上处理特定功能的情况:
* 456789 bar (origin/master, origin/HEAD, master)
| * 3456789 foo (HEAD -> feature)
| * 2345678 Merge origin/master in feature
| |\
| |/
|/|
* | 1234567
前段时间我合并了 master
,但从那以后我在我的功能上做了 foo
,而有人在 master
上做了 bar
。
现在,我想在上次合并之前重新设置 bar
:
* 3456789 foo (HEAD -> feature)
* 2345678 Merge origin/master in feature
|\
| |
| |
* | 456789 bar (origin/master, origin/HEAD, master)
我尝试了 feature
中的 git rebase master
。问题是 Git 想要在 master 的顶部重播我的所有更改,这可能需要很多工作。
一个可能的解决方案是:
$ git checkout -b temp feature~3
$ git merge master
$ git cherry-pick foo -n2
$ git branch -D feature
$ git branch -m temp feature
$ git checkout feature
$ git branch -D temp
我相信有更简单的方法。
你在问题末尾描述的是一个很好的方法。
在这里你可以弄清楚发生了什么。
另一种选择是 sqaush
因为 squash 是一个 interactive rebase
,它允许您以任何方式修改您希望的任何提交。使用编辑命令,您可以在历史记录的任何给定点编辑和添加任何提交。
要进行 git 壁球,请按照以下步骤操作:
// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X
压缩提交后 - 选择 e
进行编辑并操作所需的提交。
如果您希望保持提交不变,那么您应该使用您在 git cherry-pick