2012-08-08 38 views
9

我有分支foo关闭master/head。我想表扬大师/负责人,并在分支foo上找到这些变化。我做了以下事情:如何git commit - 发布一个分支的提交

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

问题是旧的未修改的提交显示为分支foo的一部分,修改后,它被重新绑定到master上。我做了一个git rebase -i并删除了旧的提交并且工作,但是有没有更简单/更安全的方法来修改作为分支基础的提交?是的,它是没有被全部推本地提交..

回答

11

所有你需要做的就是告诉混帐从哪里开始变基:你可以做到这一点

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 

旁白:,我们可以使用的cccccc不同的名称,如果你不喜欢使用SHA值提交。

> git reflog master 

aaaaaa [email protected]{0}: reset: moving to something 
cccccc [email protected]{1}: commit: change the froozle 
ffffff [email protected]{2}: commit: snarf the froozle 

这意味着我们可以参考cccccc[email protected]{1}(AKA,主站的先前位置)

因此,我们可以写提交ccccccfoo^这个复位为

git rebase --onto master [email protected]{1} foo 

的另一描述(也就是foo的parernt),所以我们也可以这样写:

git rebase --onto master foo^ foo 

他们都做同样的事情,你可能更喜欢在不同的情况下使用不同的。我通常会发现SHA很容易使用,因为在执行此类操作之前,我经常会拉起我的存储库的图形。

+0

谢谢,这个作品 – Aaron 2012-08-08 15:44:24

+0

而不是提交SHA你也可以使用'master @ {1}'。 – chbaker0 2017-07-25 20:28:48

+0

@ chbaker0你绝对正确 - 我最初以为你是在暗示一些不同的东西。我将这个建议添加到解释的答案中。 – 2017-07-26 02:34:47