需要git rebase -Xignore-all-space来保留我的空间

时间:2013-05-16 22:27:02

标签: git git-rebase

我正在做一个很大变化的变革,有很多空白变化。为了使合并完全可行,我需要-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保持空白变化?

2 个答案:

答案 0 :(得分:1)

我想您唯一的选择就是使用git merge,这样就不会交换他们和我们的。{/ p>

答案 1 :(得分:1)

有办法,但是很丑。最好将空白和“真实”更改分开,并先进行前者上游,然后再进行后者。但是如果您发现自己处于这种情况下...

为简单起见,我假设一切都在当前分支的单个提交中。这应该在多次提交的情况下起作用,只是(再次)会更加难看。我还假设要重新建立基础的分支是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”表示总是喜欢他们的更改,但是“我们的”和“他们的”在重新设定基础时会发生翻转,因此意味着总是喜欢我们的。这是安全的,因为我们已经手动解决了重新合并(通过合并)的问题。