我正在做一个很大变化的变革,有很多空白变化。为了使合并完全可行,我需要-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。
o如果他们的版本仅在一行中引入了空白更改,则使用我们的版本;
o如果我们的版本引入了空白更改但其版本包含重大更改,则使用版本;
o否则,合并以通常的方式进行。
然而,当在一个rebase中,他们的和我们的与他们通常的意思交换。这意味着在我的rebase中,我的所有空白更改都会丢失,因为它们位于合并的 一侧。
如何让git-rebase保持空白变化?
答案 0 :(得分:1)
我想您唯一的选择就是使用git merge
,这样就不会交换他们和我们的。{/ p>
答案 1 :(得分:1)
有办法,但是很丑。最好将空白和“真实”更改分开,并先进行前者上游,然后再进行后者。但是如果您发现自己处于这种情况下...
为简单起见,我假设一切都在当前分支的单个提交中。这应该在多次提交的情况下起作用,只是(再次)会更加难看。我还假设要重新建立基础的分支是master
,并且您的工作分支从该分支下移到了分支。
git merge master -Xignore-all-space --no-commit
。解决合并问题,使您满意。rm .git/MERGE_*
。我们将说服git这是常规提交,而不是合并。git commit -a -m "Pseudo-merge from master"
git rebase -i HEAD^^
,然后将最新的更改“修正”为原始更改。我们可以将其与上一步结合起来,但是实际上提交伪合并使我们可以复位以防万一以后出现问题。如果这是您要处理的多次提交更改,则可能希望/需要在压缩之前将伪合并合并的更改移到历史记录中的其他点,以正确模拟变基。git rebase HEAD^ --onto master -Xtheirs
“ -Xtheirs”表示总是喜欢他们的更改,但是“我们的”和“他们的”在重新设定基础时会发生翻转,因此意味着总是喜欢我们的。这是安全的,因为我们已经手动解决了重新合并(通过合并)的问题。