26

我正在尝试重新设置分支并且 git 正在弹出,因为它正在尝试执行一些失败的合并操作。我如何让 git 阻止这个?

# git rebase -f --onto master~2 master~ master
First, rewinding head to replay your work on top of it...
Applying: r1002 - CS 1.0.23
Using index info to reconstruct a base tree...
M   about.html
<stdin>:68: trailing whitespace.                     
<stdin>:115: trailing whitespace.
<stdin>:201: trailing whitespace.
<stdin>:2369: trailing whitespace.
<stdin>:2385: trailing whitespace.
warning: squelched 2305 whitespace errors
warning: 2310 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging about.html
CONFLICT (content): Merge conflict in about.html
Failed to merge in the changes.
Patch failed at 0001 r1002 - 1002
The copy of the patch that failed is found in:
   /local/melder/tmp/test/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

如您所见,有 2000 多个空格错误,手动合并并不容易。

编辑:暂时不做合并我做了:

# git add -A
# git rebase --continue

编辑:没关系,这是一个愚蠢的想法。

4

4 回答 4

26

我今天遇到了同样的问题:由于空格错误引起的冲突,rebase 失败。whitespace在对选项 (git rebase --whitespace=fix和)进行不同设置的试验失败后git rebase --whitespace=nowarn,对我有用的解决方案是忽略递归合并策略中的尾随空格错误(git rebase --abort如果需要,首先运行任何运行的 rebase):

git rebase -Xignore-space-at-eol <newbase>

取决于空白错误、选项的类型-Xignore-space-change-Xignore-all-space可能更有用。我不知道该选项--ignore-whitespace是否也有效。

于 2015-03-05T11:26:03.567 回答
5

这不会回避问题。现在,您的文件中有冲突标记!

空格问题是警告,您不应该有尽可能多的合法冲突。如果文件难以解决,您可能需要手动重建它。这取决于你在做什么。

很多时候,这两个基础是如此不同,以至于您重新设置的每个提交都会使您处理这种可怕的冲突。我倾向于避开变基工作流程并订阅合并/重置。这就是我所做的: http: //dymitruk.com/blog/2012/02/05/branch-per-feature/

如果您的问题只是行尾之类的空格问题,您可以尝试通过先在每一侧执行过滤器分支或交互式变基来清理存储库,以使每次提交的空格保持一致。

我也使用超越比较 3 或 Perforce Merge 来解决冲突。BC3 具有语法意识,应该最好地处理空格。很多时候,它甚至不会打开,因为它会为你解决冲突,你可以继续。

于 2012-11-20T01:45:40.193 回答
2

今天我这样解决了这样一个问题:

REMOVE_AFTER="3cd7a0db76ff9dca48979e24c39b408c"
REPO="git@github.com:company/repo.git"
cd ~/tmp
git clone $REPO gitfix
cd gitfix
git checkout --orphan temp $REMOVE_AFTER
git commit -m "Truncated history"
git rebase --strategy=recursive --strategy-option=theirs --onto temp $REMOVE_AFTER master

在 rebase 期间,如果您遇到CONFLICT (modify/delete)由已删除文件引起的冲突,您可以通过以下方式解决:

git rm path/to/both/deleted/file
git rebase --continue

在 rebase 期间遇到其他冲突时,您需要手动修复它,然后:

git add path/to/conflict/file
git rebase --continue

完成后,rebase 会说All done.Then you can:

git branch -D temp

现在检查结果:

git log --format=oneline
于 2014-05-12T16:02:17.337 回答
1

我认为大多数差异查看器(特别是那些带有 GUI 的查看器)让您选择如何处理空白更改。

我建议你使用类似的东西meldgit mergetool自动更正这些冲突。启动时meld,设置它的空白处理策略(从面板的Text filters选项卡中Preferences),它将自动调整这些更改。

于 2012-11-20T05:03:49.703 回答