Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制git将更改合并为;“局部修改”;作检讨之用?_Git_Merge - Fatal编程技术网

如何强制git将更改合并为;“局部修改”;作检讨之用?

如何强制git将更改合并为;“局部修改”;作检讨之用?,git,merge,Git,Merge,我想做的是将两次提交之间的更改合并到当前沙盒中作为本地更改。这可能而且容易做到吗 我知道您可以使用diff,但它不像查看本地更改那样简单。本地更改允许您在查看过程中轻松还原/修改/添加更改。我最接近我想要的是: 1在创建分支之前签出提交 2.创建一个新的临时分支机构(仅出于安全考虑) 3在分支的开始和结束之间创建补丁,如 git diff f9802a30b589503cd61e..4f6ee3fb127d958b5621 --patience --ignore-space-at-eol &g

我想做的是将两次提交之间的更改合并到当前沙盒中作为本地更改。这可能而且容易做到吗

我知道您可以使用diff,但它不像查看本地更改那样简单。本地更改允许您在查看过程中轻松还原/修改/添加更改。我最接近我想要的是:

1在创建分支之前签出提交

2.创建一个新的临时分支机构(仅出于安全考虑)

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

git diff f9802a30b589503cd61e..4f6ee3fb127d958b5621 --patience --ignore-space-at-eol  > diff.txt
4将补丁应用于本地沙箱(仍在临时分支中)

不过,这种方法存在一些问题。(A) 这是非常缓慢和痛苦的。(B) 我收到大量空白警告。(C) 可能这不是解决问题的方法;)

有更好的方法吗?

(在开始之前,我假设git状态是干净的,以免丢失任何本地更改。)

既然您已经创建了一个临时分支,为什么不使用
git merge othercommit
在othercommit中进行合并呢?当然,您的工作树和索引将根据合并的结果进行更新——它将创建一个新的提交,但是如果您不喜欢,您可以签出原始分支以返回。如果您想要进行额外的更改来修复合并的结果,那么无论如何,应该在合并的基础上进行额外的提交

或者,您甚至不需要创建临时分支—您可以始终使用
git reset--hard
(小心!)将分支移回原来的位置

顺便说一句,在(B)上,您可以将
--whitespace=nowarn
传递到
git apply
以停止这些警告,或者通过更改配置选项
core.whitespace
来更改被认为是空白错误的内容


以上是我的建议,但要回答您提出的问题的确切形式,您可以尝试以下方法:

您可以使用以下方法进行合并,而无需提交结果:

git merge --no-commit othercommit
。。。它将使用合并结果更新工作副本和索引(暂存区域),但不会创建提交。然而,这是有点风险的——如果你继续进行父母中任何一方都没有的进一步更改,然后提交,你就会创建,这可能会在以后检查历史时引起各种问题

类似地,如果您只想了解合并的效果,可以执行以下操作:

 git merge --squash othercommit
。。。这会将您的工作树更改为合并的结果,并暂存所有这些更改,但不会创建提交。但是,与
--no commit
不同的是,如果您继续进行commit,则不会将
其他commit
记录为新commit的父级。

(在开始之前,我假设git状态是干净的,以免丢失任何本地更改。)

既然您已经创建了一个临时分支,为什么不使用
git merge othercommit
在othercommit中进行合并呢?当然,您的工作树和索引将根据合并的结果进行更新——它将创建一个新的提交,但是如果您不喜欢,您可以签出原始分支以返回。如果您想要进行额外的更改来修复合并的结果,那么无论如何,应该在合并的基础上进行额外的提交

或者,您甚至不需要创建临时分支—您可以始终使用
git reset--hard
(小心!)将分支移回原来的位置

顺便说一句,在(B)上,您可以将
--whitespace=nowarn
传递到
git apply
以停止这些警告,或者通过更改配置选项
core.whitespace
来更改被认为是空白错误的内容


以上是我的建议,但要回答您提出的问题的确切形式,您可以尝试以下方法:

您可以使用以下方法进行合并,而无需提交结果:

git merge --no-commit othercommit
。。。它将使用合并结果更新工作副本和索引(暂存区域),但不会创建提交。然而,这是有点风险的——如果你继续进行父母中任何一方都没有的进一步更改,然后提交,你就会创建,这可能会在以后检查历史时引起各种问题

类似地,如果您只想了解合并的效果,可以执行以下操作:

 git merge --squash othercommit

。。。这会将您的工作树更改为合并的结果,并暂存所有这些更改,但不会创建提交。但是,与“无提交”不同,如果您随后继续提交,则不会将“其他提交”记录为新提交的父级。

您能否绘制回购当前状态的ascii图,并解释您想要的方式?您能否绘制回购当前状态的ascii图,然后用这种方式解释你想要什么?