将对文件的更改分发到上次提交,以使用Git修改每个文件(修复更改文件的上次提交)

将对文件的更改分发到上次提交,以使用Git修改每个文件(修复更改文件的上次提交),git,rebase,Git,Rebase,git上是否有一种方法/命令可以将对某些文件所做的更改“分发”到最后一次修改每个文件的提交 在很多情况下,我注意到在已经提交的文件中有一个小的拼写错误(主要是注释:缺少逗号、关闭括号、一些小的语法错误…)。我想修复每个文件的最后一次提交,以添加小修复。这是否可能不需要手动执行提交,运行rebase--interactive,向上移动提交,将其标记为上一次提交的fixup 例如:假设我有这种情况: Commit A: to add a new feature. 0xa1b2c3

git上是否有一种方法/命令可以将对某些文件所做的更改“分发”到最后一次修改每个文件的提交

在很多情况下,我注意到在已经提交的文件中有一个小的拼写错误(主要是注释:缺少逗号、关闭括号、一些小的语法错误…)。我想修复每个文件的最后一次提交,以添加小修复。这是否可能不需要手动执行提交,运行
rebase--interactive
,向上移动提交,将其标记为上一次提交的
fixup

例如:假设我有这种情况:

Commit A: to add a new feature.   0xa1b2c3         2021/03/10 00:00:00
     |-> last commit that modified file '/home/borrajax/projects/feature.py'

Commit B: to test the feature.    0xd4e5f6         2021/03/10 00:05:00
     |-> last commit that modified file '/home/borrajax/projects/test_feature.py'

Commit C: something unrelated.    0x112233         2021/03/10 00:10:00
     |-> doesn't alter 'feature.py' or 'test_feature.py'
然后,我在
feature.py
test\u feature.py

有没有一种说法是“在文件
feature.py
上添加这些小更改以提交a”和“在文件
test\u feature.py
上添加这些小更改以提交B”(保持提交顺序a->B->C)

我现在做的是:

  • feature.py
    上的更改添加到类似“Fixup commit a”的提交中
  • test\u feature.py上的更改添加到类似“Fixup”的提交中
    承诺B“
  • 运行一个
    rebase--interactive
  • 移动 “修复…”在我要修复的提交下提交(“提交A:添加…”和“修复”下的“修复提交A”) “提交B:测试…”下的“提交B”)
  • --interactive
    编辑器中将它们标记为
    fixups
  • 这相当耗时,而且很容易出错

    我已经阅读了另外两个S.O问题(和),但我不认为提议的解决方案完全符合我的要求(也许我错了,但他们确实如此……)

    不必手动执行提交,运行rebase--interactive,向上移动提交,将其标记为上一次提交的修正,这是可能的吗

    是的,
    rebase
    将为您执行此操作。看看它

  • 使用指向要修复的提交的
    git commit--fixup=
    标记您的提交。(消息搜索语法非常方便:
    --fixup=@^{/somewordfromtsubject}
  • 创建所需数量的修复提交
  • git-rebase-i——自动取消最旧的fixedupcommit^

  • 您可以使用git commit--amend编辑上次提交,但我建议您只创建一个新的提交。这是已发布的历史记录还是未发布的历史记录?我不建议修改已出版的历史;如果它是未发布的,我想您会希望在当前开发分支与其上游分支发生分歧时停止。是否正确?如果您在单独的提交中修改了一个文件两次呢?是否确实要始终将修复应用于最新提交?也许它应该不去管这些更改,或者提示您做出决定。@JohnKugelman它还没有发布。事实上,这个想法只会改变“我的”承诺。。。这应该不会有太大问题,因为我肯定(小心地)知道我在其中一个“我的提交”中修改了文件。至于第二个(非常好)问题,是的:对于我目前正在寻找的内容,最新的提交就足够了。我用这种方式做的只是一些小的修正(大部分是评论中的打字错误),所以它是一个非交互式的重基@马特哈哈。我不记得了,但我想它还是会为你列出提货单,它只会先为你做一些繁琐的自动化部分。这太棒了!非常感谢。yvw。顺便说一句,你也可以只提交一个文件,不管是什么阶段,你所追求的那种git-r-dun工作流程也正是git的目标。