- 此问题在此处已有答案**:
(19个答案)
八年前就关门了。
我已经提交了3次git,但是还没有被推送。我怎么修改旧的(ddc6859af44)和(47175e84c),哪一个不是最近的?
$git log
commit f4074f289b8a49250b15a4f25ca4b46017454781
Date: Tue Jan 10 10:57:27 2012 -0800
commit ddc6859af448b8fd2e86dd0437c47b6014380a7f
Date: Mon Jan 9 16:29:30 2012 -0800
commit 47175e84c2cb7e47520f7dde824718eae3624550
Date: Mon Jan 9 13:13:22 2012 -0800
6条答案
按热度按时间vatpfxk51#
现在用
edit
或e
(替换pick
)标记您要修改的。现在保存并退出。现在做你的改变,然后
如果你想添加一个额外的delete,可以从commit命令中删除选项;如果你想调整消息,可以只省略
--no-edit
选项。332nm8kg2#
我准备了我的提交,我想用一个旧的来修改它,并惊讶地看到rebase -我抱怨我有未提交的修改。但我不想再次修改旧提交的编辑选项。所以解决方案非常简单和直接:
1.准备对旧提交的更新,添加并提交
git rebase -i <commit you want to amend>^
-注意^
,以便在文本编辑器中看到所述提交1.你会得到这样的结果
1.现在,要将e23 d23 a与8 c83 e24组合,您可以更改行顺序并使用squash,如下所示:
1.写入并退出该文件,您将看到一个编辑器来合并提交消息。执行此操作并保存/退出文本文档
1.您已完成,您的提交已修改
功劳归于:http://git-scm.com/book/en/Git-Tools-Rewriting-History还有其他有用的git魔术演示。
fnatzsnv3#
我也用过几次另外一种方法。实际上,这是一个手动的
git rebase -i
,当你想重新排列几个提交,包括压缩或拆分其中的一些时,它很有用。主要的优点是你不必在一个单一的时刻决定每个提交的命运。在这个过程中,你也可以使用所有的Git特性,而不像在rebase过程中。例如,你可以在任何时候显示原始的和重写的历史记录,甚至可以重新定基!我将以下面的方式引用提交,这样更容易阅读:
您的历史在开始时看起来像这样:
我们将按以下方式重新创建:
程序
现在使用
git add
(git add -i
,git stash
等)来改进您的旧提交。您甚至可以将旧提交拆分为两个或更多。中间结果:
让我们完成:
或者只使用一个命令:
就这样,你现在可以
push
你的进度了。最后一项任务是删除临时分支:
qpgpyjmq4#
您可以使用
git rebase
重写提交历史,这可能会对您的更改造成潜在的破坏,因此请谨慎使用。首先把你的“修正”修改作为一个普通的提交,然后从你最早提交的父提交开始进行交互式的变基
这将启动你的编辑器处理所有提交。重新排列它们,使你的“修正”提交位于你想修正的提交之下。然后用
s
替换“修正”提交行的第一个单词,这将把它与之前的提交合并(squash)。保存并退出编辑器,按照说明操作。23c0lvtd5#
你可以使用
git rebase --interactive
,在你想要修改的提交上使用edit
命令。eyh26e7m6#
如果OP想要将指定的2个提交压缩为1个,这里有一个替代方法,可以不进行重定基
@{N)
语法很容易理解,因为它允许你引用你的引用历史,在这里HEAD代表你当前的提交。