【问题标题】:Apply changes to an existing commit without interactive rebasing将更改应用于现有提交而无需交互式变基
【发布时间】:2020-10-01 14:46:09
【问题描述】:

有时(经常)我对我的代码库进行更改,我希望它成为特定(尚未发布)提交的一部分。

通常我 stash 我的更改,rebase -i ID^ 提交 stash pop 和 --amend 这些更改和 rebase --continue。

当有比我想要的更多修改时出现问题commit --amend - 我首先必须摆脱那些,例如通过创建一个临时提交..

有没有办法在一个(非交互式)步骤中完成所有这些?类似的东西

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

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

【问题讨论】:

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

标签: git git-commit git-rebase


【解决方案1】:

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

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

git commit --fixup=oldCommitHash

然后只用这个命令:

git rebase branchDesired -i --autosquash

Git 将重新排序提交以匹配原始和修复,然后在重新设置的分支中将它们压缩在一起。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多