在过去的一个小时左右,我修改了文件
A
ATest
B
BTest
为了确保我的提交消息与实际更改一致,提交A
了描述。不幸的是,我没有包含ATest
在该提交中。
同时,仍然没有承诺是B
和BTest
。
在这一点上进行的最佳方法是什么?我想:
- 恢复以前的提交而不影响我当前未提交的文件?
- 将相同描述下的另一个文件添加到上一个提交中?
在过去的一个小时左右,我修改了文件
A
ATest
B
BTest
为了确保我的提交消息与实际更改一致,提交A
了描述。不幸的是,我没有包含ATest
在该提交中。
同时,仍然没有承诺是B
和BTest
。
在这一点上进行的最佳方法是什么?我想:
要将新文件添加到上一个提交:
$ git add new-file
$ git commit --amend
git commit --amend --no-edit
如果您不想更改提交消息,则可以使用。
这是一个有趣的流程图1,它也非常方便:它为原始问题和修改后的“如果它不是最后一次提交怎么办?”提供了正确的建议。问题。
将文件添加到先前的提交
如果您已经推送了您正在处理的分支,请先查看手册页。请特别注意:
Rebase(或任何其他形式的重写)其他人基于其工作的分支是一个坏主意:它下游的任何人都被迫手动修复他们的历史记录。
但是,如果您还没有推动您的分支,请准备进入危险区域。
查找提交哈希
首先,您需要知道要添加到的提交的提交哈希。这由 显示git log
。您实际上想在要添加的提交之前指定提交。(您可以将其视为要更改的提交片段的起始索引。)您可以通过运行git log -1 HEAD~n
. 其中 'n' 是一个整数,你递增直到你有正确的提交。或者你可以数数,真的没有。
但是,如果你计算,至少确认你有正确的提交git log -1 HEAD~5
或任何你的计数。您不应该看到要添加的提交。
危险,嘿嘿
现在您可以运行git rebase -i HEAD~5
了,或者改用提交哈希git rebase -i hash^
。这将打开您最喜欢的文本编辑器和要编辑的文件。该文件是 rebase 命令的待办事项列表。文件中的注释告诉您有哪些选项。只需找到要添加的提交所在的行,然后在该行上将“pick”更改为“edit”。现在保存并关闭文件。
一旦达到您告诉它编辑的提交,rebase 将停止。运行 agit status
以查看它提供的额外信息。git add .
暂存您的文件以使用或任何文件名添加到提交中。
然后,执行git commit --amend
or git commit --amend --no-edit
(如果您不想编辑提交消息)。这将修改您选择编辑的提交。
最后,运行git rebase --continue
。
如果有疑问,在 Linux 上,您可以通过阅读man git-rebase
或的文档输出来了解更多信息git --help rebase
。