如何git commit - 作为分支基础的提交

时间:2012-08-08 00:44:14

标签: git rebase amend

我有一个主人/头的分支foo。我想修改主人/负责人并在分支foo上获取这些更改。我做了以下事情:

git checkout master
git add ...
git commit --amend
git checkout foo
git rebase master

问题是旧的未经修改的提交在修改后显示为分支foo的一部分,并且它被重新命名为master。我做了一个git rebase -i并删除了旧的提交,但是有效,但有一种更简单/更安全的方法来修改作为分支基础的提交吗?是的,这是所有未被推送的本地提交..

1 个答案:

答案 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很容易使用,因为在执行这种操作之前我经常会提取我的存储库的图表。