我有一个主人/头的分支foo。我想修改主人/负责人并在分支foo上获取这些更改。我做了以下事情:
git checkout master
git add ...
git commit --amend
git checkout foo
git rebase master
问题是旧的未经修改的提交在修改后显示为分支foo的一部分,并且它被重新命名为master。我做了一个git rebase -i并删除了旧的提交,但是有效,但有一种更简单/更安全的方法来修改作为分支基础的提交吗?是的,这是所有未被推送的本地提交..
答案 0 :(得分:19)
你需要做的就是告诉git从哪里开始变基:你可以做到这一点
git rebase --onto master SOMESHA foo
SOMESHA是老主人SHA。那就是你的树现在看起来像这样
* aaaaaa - (master)
| * bbbbbb - (foo)
| * cccccc - (old master)
|/
* ffffff
你做了
git rebase --onto master cccccc foo
你的树将会是这样的。
* dddddd - (foo)
|
* aaaaaa - (master)
|
* ffffff
ASIDE:如果您不喜欢使用SHA值,我们可以为cccccc
提交使用不同的名称。
> git reflog master
aaaaaa master@{0}: reset: moving to something
cccccc master@{1}: commit: change the froozle
ffffff master@{2}: commit: snarf the froozle
这意味着我们可以将cccccc
引用为master@{1}
(AKA,以前的主人位置)
所以我们可以把这个rebase写成
git rebase --onto master master@{1} foo
提交cccccc
的另一个描述是foo^
(AKA,foo的parernt提交),所以我们也可以把它写成
git rebase --onto master foo^ foo
他们都做了完全相同的事情,你可能更喜欢在不同的情况下使用不同的。我经常发现SHA很容易使用,因为在执行这种操作之前我经常会提取我的存储库的图表。