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