Git 将更改应用于现有提交,而无需交互重定基址

Git 将更改应用于现有提交,而无需交互重定基址,git,git-commit,git-rebase,Git,Git Commit,Git Rebase,有时(通常)我会对代码库进行更改,希望将其作为特定(尚未发布)提交的一部分 通常我stash我的更改,rebase-I ID^提交stash pop和-修改这些更改和rebase-继续 当有比我想要提交的修改更多的修改时,问题就会出现——修改——我必须首先消除这些修改,例如,创建一个临时提交 是否有一种方法可以在一个(非交互式)步骤中完成所有这些?差不多 git commit --amend --rebase ID [file1, file2, ..] 或者这一切真的有很好的理由吗?恐怕没有g

有时(通常)我会对代码库进行更改,希望将其作为特定(尚未发布)提交的一部分

通常我
stash
我的更改,
rebase-I ID^
提交
stash pop
-修改这些更改和
rebase-继续

当有比我想要提交的修改更多的修改时,问题就会出现——修改——我必须首先消除这些修改,例如,创建一个临时提交

是否有一种方法可以在一个(非交互式)步骤中完成所有这些?差不多

git commit --amend --rebase ID [file1, file2, ..]

或者这一切真的有很好的理由吗?

恐怕没有git命令允许您这样做,因为git的工作方式不同,无法在不影响ID^的情况下更改提交ID^^的历史记录。这就是为什么你只能修改你最后的承诺

我的建议是使用
--fixup
选项创建提交,以便修补旧的提交:

git commit --fixup=oldCommitHash
然后用这个命令:

git rebase branchDesired -i --autosquash
Git将对提交进行重新排序,以匹配原始和修复,然后将它们压在重新基化的分支中

这是两个命令,而不是一个命令,但这是控制rebase正确性的好方法。

答案并不完全正确(没有摆脱
rebase-i
)。但是可能很有用,您看过
commit--fixup
commit--squash
了吗?这是一种方便的方法,可以让git准备(重新排序和定义)它的交互式待办事项列表。