git重基冲突合并错误文件
我有一个我认为非常奇怪的问题,就是在重基期间合并冲突 我正在尝试将功能分支重新设置为开发分支:git重基冲突合并错误文件,git,merge,conflict,rebase,corruption,Git,Merge,Conflict,Rebase,Corruption,我有一个我认为非常奇怪的问题,就是在重基期间合并冲突 我正在尝试将功能分支重新设置为开发分支: git checkout myFeatureBranch git rebase developBranch 现在git rebase报告冲突,我必须使用git mergetool来解决冲突 git mergetool Git mergetool声明了一个冲突的文件myFile1.h,合并界面打开(同一个repo的问题发生在Linux或Windows/tortoisegit上)。我看到的是,“他们的
git checkout myFeatureBranch
git rebase developBranch
现在git rebase报告冲突,我必须使用git mergetool来解决冲突
git mergetool
Git mergetool声明了一个冲突的文件myFile1.h
,合并界面打开(同一个repo的问题发生在Linux或Windows/tortoisegit上)。我看到的是,“他们的”文件是完全错误的文件myOtherFile.c
,尽管“我的”文件正确地显示了myFile1.h
我已经尝试了git gc--aggressive和git fsck--full。git gc报告根本没有问题,git fsck有很多悬而未决的东西,但没有错误或丢失的信息
这是git数据库中的某种损坏吗?如果是,可以修复吗
有什么其他可能的错误吗
我确实认为也许我可以将“我的”文件合并回它自己(完全忽略所有不正确的“他们的”更改),也许这会解决问题,但我担心这也会使事情变得更糟
无论问题是什么,它确实出现在我们的主远程回购中,因为新克隆显示出相同的重基问题
谢谢你的帮助
git config-l
输出,带有一些修订:
core.symlinks=false
core.autocrlf=input
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
core.autocrlf=true
core.excludesfile=<global exclude file>
user.name=Russell
user.email=<email address>
push.default=simple
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=<gituser@gitserver>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.puttykeyfile=<key.ppk>
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.develop.remote=origin
branch.develop.merge=refs/heads/develop
branch.myFeatureBranch.remote=origin
branch.myFeatureBranch.merge=refs/heads/myFeatureBranch
core.symlinks=false
core.autocrlf=输入
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendmail.smtpserver=/bin/msmtp.exe
diff.astextplane.textconv=astextplane
rebase.autosquash=true
core.autocrlf=true
core.excludesfile=
user.name=Russell
user.email=
push.default=simple
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.puttykeyfile=
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.develope.remote=origin
branch.develope.merge=refs/heads/develope
branch.myFeatureBranch.remote=原点
branch.myFeatureBranch.merge=refs/heads/myFeatureBranch
您遇到了git的重命名检测
首先,关于重基的一些重要注意事项
功能
合并到主功能
),您会说“我所在的分支,主功能
,是“我们的”代码,而我正在合并的分支,功能
,是“他们的”代码”-m
、-s
和-X
git rebase的参数以及有关交换边的说明。)
在合并机制内部,使用默认(递归
)策略,git认为“我们的”myFile1.h
(即来自develope
)更类似于“他们的”myOtherFile.c
(即您自己的文件版本),而不是“他们的”(即您的)myFile1.h
。所以它试图合并错误的文件
转到
git merge
文档,注意可以传递到recursive
的选项。最重要的可能是重命名阈值=
。因此,您可以通过-X rename threshold=100
(或任何足够大于50的数字)。我自己从来没有遇到过这个问题,但这似乎应该可以解决问题。您遇到了git的重命名检测
首先,关于重基的一些重要注意事项
功能
合并到主功能
),您会说“我所在的分支,主功能
,是“我们的”代码,而我正在合并的分支,功能
,是“他们的”代码”-m
、-s
和-X
git rebase的参数以及有关交换边的说明。)
在合并机制内部,使用默认(递归
)策略,git认为“我们的”myFile1.h
(即来自develope
)更类似于“他们的”myOtherFile.c
(即您自己的文件版本),而不是“他们的”(即您的)myFile1.h
。所以它试图合并错误的文件
转到
git merge
文档,注意可以传递到recursive
的选项。最重要的可能是重命名阈值=
。因此,您可以通过-X rename threshold=100
(或任何足够大于50的数字)。我自己从来没有遇到过这个问题,但这似乎应该解决这个问题。git-rebase-p develope
似乎解决了这个问题。多亏了
我还没有尝试过的答案,但出于好奇,我也打算去探索一下。git-rebase-p-develop似乎起到了作用。多亏了 我还没有尝试过他的答案,但出于好奇,我也打算探索一下 Rebase是一种减少噪音的工具,可以避免浪费时间的冗余。一旦你完成了值得写的东西,
rebase
就是“写值得读的东西”的助手。对于一次又一次的合并,当这会不必要地使读者的工作复杂化时,一对一的线性化几乎总是足够好和容易的,所以这就是默认情况下rebase尝试的。如果它转向