我正试图在Git中使用两个不相关的分支进行变基。
| A A A A A | => | A A A A A B B |
| B B |
然而,在这样做的时候,我剩下的只是来自分支M
的提交。
示范:
$ git init && git ci -m "MASTER branch" --allow-empty
[master (root-commit) 05abfe5] MASTER branch
$ git co --orphan FEATURE && git ci -m "FEATURE branch" --allow-empty
Switched to a new branch 'FEATURE'
[FEATURE (root-commit) 122671d] FEATURE branch
$ git rebase master
First, rewinding head to replay your work on top of it...
$ git lg
* 05abfe5 - (HEAD -> FEATURE, master) MASTER branch (18 seconds ago) <Niklas Rosenstein>
我对最后一个命令的期望是
$ git lg
* 122671d - (HEAD -> FEATURE) FEATURE branch (1 second ago) <Niklas Rosenstein>
* 05abfe5 - (master) MASTER branch (18 seconds ago) <Niklas Rosenstein>
git merge
而不是这种行为一样。git rebase
命令以执行如上所述的rebase?答案 0 :(得分:2)
正如ElpieKay在评论中指出的那样,对于这个特定的例子,你需要--keep-empty
。一般来说,Git倾向于抛弃,或者不首先做出承诺,对树没有任何改变。没有理由 这样做 - 连续两次使用相同树的提交是正常情况;它出现在git merge -s ours
例如 - 但确实如此。
在非交互式,非樱桃选择模式下使用git rebase
时,Git使用git format-patch
将每个提交转换为补丁,git am
(应用邮箱格式的补丁) )重新应用它们,制作原始提交的副本。 format-patch命令无法格式化&#34;什么都不做&#34;修补程序,因此当您使用-k
或--keep-empty
时,Git会切换到使用git cherry-pick
来复制提交。
还有其他选项迫使rebase使用挑选,例如--interactive
和--merge
。采摘樱桃也默认省略&#34;空&#34;提交并且还需要--keep-empty
,无论是直接调用,还是来自其他类型的rebase。