8

我正在做一个大变化的变基,有很多空白变化。为了使合并完全起作用,我需要 -Xignore-all-space。

根据 git --help rebase :

忽略空格更改,忽略所有空格,忽略空格at-eol

为了三路合并,将具有指定类型的空白更改的行视为未更改。不会忽略与行的其他更改混合的空白更改。另请参阅 git-diff(1) -b、-w 和 --ignore-space-at-eol。

o 如果他们的版本只在一行中引入空格更改,则使用我们的版本;

o 如果我们的版本引入了空白更改,但版本包含实质性更改,则使用版本;

o 否则,合并以通常的方式进行。

但是,在变基中,他们的我们的从它们通常的含义中交换。这意味着在我的 rebase 中,我所有的空白更改都丢失了,因为它们在合并一侧。

如何让 git-rebase 保持我的空白更改?

4

2 回答 2

4

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

为了简单起见,我假设所有内容都在当前分支的单个提交中。这应该在多提交情况下工作,只是(再次)会更难看。我还假设要变基的分支 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”表示总是更喜欢他们的更改,但是“我们的”和“他们的”在变基中被翻转,所以这意味着总是更喜欢我们的。这是安全的,因为我们已经手动解决了变基(通过合并)。
于 2019-01-06T19:37:23.810 回答
0

我想你唯一的选择是使用 agit merge代替,这样它就不会交换他们和我们的。

于 2014-10-01T16:39:36.653 回答