使用 Git 将对文件的更改分发到最后一次提交以修改每个文件(修复更改文件的最后一次提交)
Distribute changes to files to the last commit to modify each file (fixup last commit that changed the file) with Git
git 上是否有 way/command 来将对某些文件所做的更改“分发”到修改每个文件的最后一次提交?
在很多情况下,我注意到已经提交的文件中有一个小的拼写错误(主要是评论:缺少逗号、括号结束、一些小的语法错误...)。我想修复每个文件的最后一次提交以添加小修复。是否可以不必手动进行提交,运行 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_feature.py
中的一些小错别字
有没有一种方法可以说 “将文件 feature.py
上的这些小更改添加到提交 A” 和 “将这些小更改添加到文件上test_feature.py
提交 B(保持提交顺序 A -> B -> C)
我目前做的是:
- 将
feature.py
上的更改添加到提交中,例如 “修复提交 A”
- 将
test_feature.py
上的更改添加到 之类的提交中"Fixup
提交 B
- 运行一个
rebase --interactive
- 移动
"Fixup..." 在我要修复的提交下面提交("Fixup Commit A" 在 "Commit A : 添加..." 和 "Fixup
commit B under "Commit B: to test...")
- 在
--interactive
编辑器中将它们标记为 fixups
。
这相当耗时,而且很容易出错。
我已经阅读了另外两个 S.O 问题 (Git distribute fixup commit to original commits and git: squash/fixup earlier commit),但我认为建议的解决方案并不完全符合我的要求(也许我错了,他们做,虽然...)
Is that possible without having to manually do a commit, run rebase --interactive, move the commit up, mark it as a fixup of the previous commit...
是的,rebase
会为您做这件事。见其--autosquash
option.
- 用
git commit --fixup=<ref>
标记您的提交,指向您要修复的提交。 (消息搜索语法非常方便:--fixup=@^{/somewordfromitssubject}
。)
- 创建任意数量的修复提交。
git rebase -i --autosquash theoldestfixedupcommit^
.
git 上是否有 way/command 来将对某些文件所做的更改“分发”到修改每个文件的最后一次提交?
在很多情况下,我注意到已经提交的文件中有一个小的拼写错误(主要是评论:缺少逗号、括号结束、一些小的语法错误...)。我想修复每个文件的最后一次提交以添加小修复。是否可以不必手动进行提交,运行 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_feature.py
有没有一种方法可以说 “将文件 feature.py
上的这些小更改添加到提交 A” 和 “将这些小更改添加到文件上test_feature.py
提交 B(保持提交顺序 A -> B -> C)
我目前做的是:
- 将
feature.py
上的更改添加到提交中,例如 “修复提交 A” - 将
test_feature.py
上的更改添加到 之类的提交中"Fixup 提交 B - 运行一个
rebase --interactive
- 移动 "Fixup..." 在我要修复的提交下面提交("Fixup Commit A" 在 "Commit A : 添加..." 和 "Fixup commit B under "Commit B: to test...")
- 在
--interactive
编辑器中将它们标记为fixups
。
这相当耗时,而且很容易出错。
我已经阅读了另外两个 S.O 问题 (Git distribute fixup commit to original commits and git: squash/fixup earlier commit),但我认为建议的解决方案并不完全符合我的要求(也许我错了,他们做,虽然...)
Is that possible without having to manually do a commit, run rebase --interactive, move the commit up, mark it as a fixup of the previous commit...
是的,rebase
会为您做这件事。见其--autosquash
option.
- 用
git commit --fixup=<ref>
标记您的提交,指向您要修复的提交。 (消息搜索语法非常方便:--fixup=@^{/somewordfromitssubject}
。) - 创建任意数量的修复提交。
git rebase -i --autosquash theoldestfixedupcommit^
.