如何强制git将更改合并为“本地修改”以供审阅?

时间:2011-05-23 08:39:53

标签: git merge

我想要做的是将2次提交之间的更改合并到当前的沙箱中作为本地更改。这有可能吗?

我知道你可以使用diff,但它不像查看本地更改那么容易。通过本地更改,您可以在审核时轻松还原/修改/添加更改。我得到的最接近的是:

1在我的分支创建之前检查提交

2创建一个新的临时分支(仅为安全起见)

3在分支的开头和结尾之间创建补丁,如

git diff f9802a30b589503cd61e..4f6ee3fb127d958b5621 --patience --ignore-space-at-eol  > diff.txt

4将补丁应用于本地沙箱(仍在临时分支中)

git apply diff.txt

但这种方法存在问题。 (A)它非常缓慢而痛苦。 (B)我得到了大量的空白警告。 (C)可能这不是这样做的方法;)

有更好的方法吗?

1 个答案:

答案 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记录为新提交的父级。