我想要做的是将2次提交之间的更改合并到当前的沙箱中作为本地更改。这有可能吗?
我知道你可以使用diff,但它不像查看本地更改那么容易。通过本地更改,您可以在审核时轻松还原/修改/添加更改。我得到的最接近的是:
1在我的分支创建之前检查提交
2创建一个新的临时分支(仅为安全起见)
3在分支的开头和结尾之间创建补丁,如
git diff f9802a30b589503cd61e..4f6ee3fb127d958b5621 --patience --ignore-space-at-eol > diff.txt
4将补丁应用于本地沙箱(仍在临时分支中)
git apply diff.txt
但这种方法存在问题。 (A)它非常缓慢而痛苦。 (B)我得到了大量的空白警告。 (C)可能这不是这样做的方法;)
有更好的方法吗?
答案 0 :(得分:3)
(我假设您在开始之前git状态是干净的,以免丢失任何本地更改。)
既然你已经创建了一个临时分支,为什么不用git merge othercommit
来合并另一个提交呢?您的工作树和索引将使用合并的结果进行更新,当然 - 它将创建一个新的提交,但如果您不喜欢它,您可以检查您的原始分支以获取回来。如果您想进行其他更改以修复合并的结果,那么无论如何都应该在合并之上进行额外提交。
或者,您甚至不需要创建临时分支 - 您始终可以使用git reset --hard
(小心!)将分支移回原来的位置。
顺便说一句,在(B)上,您可以将--whitespace=nowarn
传递给git apply
以停止这些警告,或通过更改配置选项core.whitespace
来更改被视为空白错误的内容。
以上是我的建议,但要回答您提出的问题的确切形式,您可以尝试以下方法:
您可以使用以下方式执行合并而不提交结果:
git merge --no-commit othercommit
...它将使用合并结果更新您的工作副本和索引(暂存区域),但不会创建提交。但是,这有点风险 - 如果你继续进行不在父母任何一方的进一步更改,然后提交,你将创建an evil merge,这可能会导致各种问题,当你'稍后重新审视历史。
同样,如果您只想查看合并的效果,可以这样做:
git merge --squash othercommit
...它会将您的工作树更改为合并的结果,并暂存所有这些更改,但不会创建提交。但是,与--no-commit
不同,如果您继续提交,则不会将othercommit
记录为新提交的父级。