需要使用git rebase -Xignore-all-space命令来保留我的空格。

8
我正在对一项重大更改进行变基,其中包含了许多空格更改。为了使合并正常工作,我需要使用-Xignore-all-space选项。
根据git --help rebase的说明:
忽略空格变化(ignore-space-change)、忽略所有空格变化(ignore-all-space)、忽略行末空格变化(ignore-space-at-eol)将具有指定类型的空格变化的行视为在三方合并中未更改。与其他更改混合的空格更改不会被忽略。另请参阅git-diff(1) -b、-w和--ignore-space-at-eol。
如果their版本只对一行引入了空格更改,则使用our版本;如果our版本引入了空格更改但their版本包括实质性更改,则使用their版本;否则,合并继续按照通常的方式进行。
然而,在变基时,theirsours与它们通常的含义相反。这意味着在我的变基中,所有的空格更改都会丢失,因为它们在合并的their一侧。
如何让git-rebase保留我的空格更改?

3
你是否曾经尝试使用变基(rebase)来解决问题? - epologee
1
有点像。我找到了一种重新设置的方法,而不是完全糟糕的合并,这可能是您想要的。(这也是我最初想要的。) - D0SBoots
2个回答

4
有一种方法,但它很丑陋。你最好将空格和“真正的”更改分开,并在做后者之前先提交前者。但是如果你发现自己处于这种情况...
为简单起见,我假设所有内容都在当前分支的单个提交中。如果涉及多次提交,这也适用,只不过会更加丑陋。我还假设要重置的分支是master,而你的工作分支则从此分支派生出来。
  1. git merge master -Xignore-all-space --no-commit. 解决合并问题。
  2. rm .git/MERGE_*. 我们将让git相信这是一个普通的提交,而非合并。
  3. git commit -a -m "Pseudo-merge from master"
  4. git rebase -i HEAD^^ 并将最后一个更改与原始更改合并。我们可以将此步骤与上一步组合,但实际提交伪合并使我们有一个可重置的提交,以防稍后出现问题。如果您正在处理多个提交更改,则可能需要将伪合并更改移动到历史记录中的不同位置,然后再压缩以正确模拟重置。
  5. git rebase HEAD^ --onto master -Xtheirs "-Xtheirs"表示始终优先考虑他们的更改,但是在rebase中,“ours”和“theirs”被翻转了,这意味着始终优先考虑我们自己的更改。这是安全的,因为我们已经通过合并手动解决了重置(通过rebase)。

1
谢谢分享!这绝对不是标准的工作流程,但另一方面是一个令人印象深刻的技巧。 - epologee

0

我猜你唯一的选择就是使用 git merge,这样它就不会交换他们和我们的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接