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

D0S*_*ots 8 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中,我的所有空白更改都会丢失,因为它们位于合并一边.

如何让git-rebase保持我的空白变化?

D0S*_*ots 5

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

为了简单起见,我假设所有内容都在当前分支的一次提交中。这应该适用于多次提交的情况,只是(再次)会更加难看。我还假设要变基的分支是 is 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”表示始终喜欢他们的更改,但“我们的”和“他们的”在变基中翻转,因此这意味着始终喜欢我们的更改。这是安全的,因为我们已经手动解决了变基(通过合并)。