【问题标题】:How to git commit --amend a commit that's the base of a branch如何 git commit -- 修改作为分支基础的提交
【发布时间】:2012-08-05 01:38:47
【问题描述】:

我有 master/head 的分支 foo。我想修改 master/head 并在分支 foo 上获取这些更改。我做了以下事情:

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

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

【问题讨论】:

    标签: git rebase git-amend


    【解决方案1】:

    你需要做的就是告诉 git 从哪里开始 rebase:你可以这样做

    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}(AKA,master 的先前位置)

    所以我们可以把这个变基写成

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

    提交cccccc 的另一个描述是foo^(AKA,foo 的父提交),所以我们也可以这样写

    git rebase --onto master foo^ foo
    

    它们都做完全相同的事情,您可能更喜欢在不同的情况下使用不同的。我通常发现 SHA 使用起来很简单,因为我经常会在执行此类操作之前拉出我的存储库的图表。

    【讨论】:

    • 对于任何希望了解这些变基命令的详细工作原理的人,我可以推荐this answer
    猜你喜欢
    • 2014-03-20
    • 2017-03-16
    • 2016-07-25
    • 2015-10-09
    • 1970-01-01
    • 2016-08-21
    • 2011-12-28
    • 2017-06-05
    • 2018-11-27
    相关资源
    最近更新 更多