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

18

我从主分支(master/head)创建了一个名为foo的分支。 我想修改主分支(master/head)并使这些更改在foo分支上生效。 我执行了以下操作:

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

问题是在修改提交后,旧的未修改的提交显示为分支foo的一部分,并被 rebase 到了 master 分支上。我使用了 git rebase -i 命令并删除了旧的提交,这个方法可以解决问题,但是否有更简单/更安全的方法来修改作为分支基础的提交呢?是的,这些都是本地提交,并没有被推送到服务器上。

1个回答

28
您只需要告诉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

顺带一提:如果你不喜欢使用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}(也就是master的先前位置)。

因此,我们可以将此rebase编写为

git rebase --onto master master@{1} foo

提交 cccccc 的另一种描述是 foo^(也称为 foo 的父提交),因此我们也可以这样写:

git rebase --onto master foo^ foo

它们都完全执行相同的操作,您可能会根据不同情况喜欢使用不同的操作方式。通常我发现SHA易于使用,因为在执行这种操作之前,我经常会拉取仓库的图形。


1
对于任何想要详细了解这些变基命令工作原理的人,我可以推荐这个答案 - Lii
我可以确认这解决了我的问题。 - Mario Rojas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接