我正在尝试合并一个包含一堆提交的分支(~20)。然而,第一次提交是关于重新缩进整个代码正确,并且所有后续提交也包含空格更改,这是我不想要的。 我正在尝试重新申请所有这些提交,但我不知道如何告诉git忽略空间变化。
然而,我在一个干净的分支上尝试了git format-patch -20 --ignore-all-space
后跟git apply *.patch
,但是这显然失败了,因为补丁是根据其祖先的空间变化单独格式化的。
基本上我希望拥有相同的历史记录,但不会更改空格:
A - B - C - D
/
P - Q
\
A'- B'- C'- D' (spaces trimmed)
编辑:澄清哪些提交包含哪些内容。
tabs
替换为spaces
)。我想放弃。spaces
代替tabs
。我也想保持这些更改。答案 0 :(得分:1)
转到D
职位/分行。然后根据需要删除所有空格。然后添加&再次提交。
$ git checkout <D-position-branch-name>
更改您想要的内容(删除所有空格)
$ git commit -am 'Remove spaces' # add & commit your changes
$ git push origin HEAD # push your changes to remote
答案 1 :(得分:1)
在Q
签出时尝试此操作:
git merge -s ours A
git merge -X ignore-space-change D
第一个实际上并没有改变Q中的任何代码,只是&#34;假装&#34;合并是通过创建一个&#34;虚拟&#34;合并提交。这有助于忽略后续增量合并中的A
。
下一个合并命令会将剩余的提交从D
合并为B
,但不再合并A
。
引用docs:
我们的解析任意数量的头,但合并的结果树始终是当前分支头的树,实际上忽略了所有其他分支的所有更改。
为了进行三向合并,ignore-space-change 将指定类型的空白更改的行视为未更改。与空行的其他更改混合的空白更改不会被忽略。 [...]
- 如果他们的版本只引入了对行的空白更改,则使用我们的版本;
- 如果我们的版本引入了空格更改但其版本包含实质性更改,则使用版本
;- 否则,合并将以通常的方式进行。