使用默认参数的Git rebase不会检测到冲突。为什么?

时间:2019-01-30 13:57:12

标签: git

我有这种情况:

带有一些文件的简单C#项目:Fun1.cs,Fun2.cs,Fun3.cs。 文件包含空类。

我有两个分支:

  • 分支机构,其中Fun3.cs文件已删除
  • branchtwo,其中Fun3.cs文件已修改。

我将brachone合并为master,现在尝试在branchtwo上执行: git rebase master

我原本希望与之混淆-Fun3.cs已被删除-但是没有冲突,并且Fun3.cs中的更改已应用于Fun1.cs(!)

Git使用其他选项进行重新设置,例如:

git rebase -i master
git rebase master -m
git rebase master -s recursive
git rebase master -s recursive -X rename-threshold=100
git rebase master -s recursive -Xpatience

全部检测到冲突。

控制台输出:

/GitCondingDojo/Example/MyProject (branchtwo)
$ git rebase master -m
First, rewinding head to replay your work on top of it...
CONFLICT (modify/delete): MyGitApp/Fun3.cs deleted in master and modified in HEAD~0. Version HEAD~0 of MyGitApp/Fun3.cs left in tree.

Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".


/GitCondingDojo/Example/MyProject (branchtwo|REBASE-m 1/1)
$ git rebase --abort

/GitCondingDojo/Example/MyProject (branchtwo)
$ git rebase master -s recursive
First, rewinding head to replay your work on top of it...
CONFLICT (modify/delete): MyGitApp/Fun3.cs deleted in master and modified in HEAD~0. Version HEAD~0 of MyGitApp/Fun3.cs left in tree.

Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".


/GitCondingDojo/Example/MyProject (branchtwo|REBASE-m 1/1)
$ git rebase --abort

/GitCondingDojo/Example/MyProject (branchtwo)
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added functionality to Fun3
Using index info to reconstruct a base tree...
A       MyGitApp/Fun3.cs
Falling back to patching base and 3-way merge...
Auto-merging MyGitApp/Fun1.cs

此行为背后的原理是什么?是否有一组“安全”或“推荐”的参数用于变基?

2 个答案:

答案 0 :(得分:1)

这是重命名检测,可检测到错误的重命名。尝试将-Xno-renames选项添加到rebase命令

  

是否存在一组用于确定基准的“安全”或“推荐”参数?

恐怕没有一套通用的视蛋白。像您这样的“无冲突”方面的案件比“冲突”方面的案件少见,因此通常会被检测到,然后您可以选择使用其他选项进行重试。如果像您这样的人可能不被注意,那么您稍后必须对其进行修复。希望这些信息不会丢失,以后您可以将其移到正确的位置。

答案 1 :(得分:0)

尝试在git fetch origin之前做一个git rebase master。那应该可以解决问题。