我有一个Markdown文章的Git仓库,人们会创建拉取请求(每个Markdown文章一个),最终合并到“主分支”,然后直接在“主分支”上工作,将该文章移动到名为“wordpressed”的文件夹中,然后提交并推送到“主分支”。
我有一个非常老的拉取请求,仍然停留在名为“home-base”的分支中,由一个名为“dan/homebase.md”的文件组成,我正在考虑通过一些提交将其编辑到适当的形状,然后合并到“主分支”。
这个“home-base”分支是如此之旧,从它的角度来看,仓库与今天在“主分支”中的样子完全不同。因此,我想倒置合并“主分支”到“home-base”中,只是为了使它更加更新,并将合并基础向上移动很多。
但是当我尝试这样做时,我遇到了一个我无法理解的合并冲突。
为了展示情况,我将展示每个分支中文件和文件夹的“ls”命令输出。我将从“主分支”开始:
好的,那么我不理解最后一行是什么意思。什么叫做“added by us” 是 wordpressed/homebase.md?不!那不是我们添加的位置。我们是在 dan 中添加的。
无论是
再次对问题的详细描述表示歉意。
我有一个非常老的拉取请求,仍然停留在名为“home-base”的分支中,由一个名为“dan/homebase.md”的文件组成,我正在考虑通过一些提交将其编辑到适当的形状,然后合并到“主分支”。
这个“home-base”分支是如此之旧,从它的角度来看,仓库与今天在“主分支”中的样子完全不同。因此,我想倒置合并“主分支”到“home-base”中,只是为了使它更加更新,并将合并基础向上移动很多。
但是当我尝试这样做时,我遇到了一个我无法理解的合并冲突。
为了展示情况,我将展示每个分支中文件和文件夹的“ls”命令输出。我将从“主分支”开始:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
$ ls -1 -R
README.md
dan
instructions.md
wordpressed
./dan:
./wordpressed:
AppDelegateRefactor.md
BareListContentView.md
CellContentConfiguration.md
ControlTargetActioniOS14.md
GetStartedWithPods.md
MultipleTrailingClosures.md
StatesAndBackgrounds.md
Swift52notes1.md
Swift52notes2.md
Swift52notes3.md
UserInteractiveCells.md
bdd-common-pitfalls.md
bdd.md
brantsMenuBar.md
collectionViewContentConfig.md
collectionViewLists.md
collectionViewLists2.md
collectionViewOutline.md
debuggingLinks.md
diffableDataSources.md
diffableDataSources2.md
forwardCompatibity.md
haptics.md
iOS13deprecations.md
images
inAppPurchases.md
logging.md
miscSwiftTricks1.md
miscSwiftTricks2.md
miscSwiftTricks3.md
miscSwiftTricks4.md
multipleSelection.md
mysteriesOfLayout.md
newInIOS14.md
packages.md
photoPicker.md
protocolParadox.md
splitViewControllers.md
splitViewControllers2.md
swiftTrickTwoClasses.md
targetActionRant.md
typescript-shape-of-things.md
untappableButton.md
what-vs-how.md
xcode12Editing.md
xcode12testing.md
xcodeWhereAmI.md
xcodeWorkInTwoPlaces.md
./wordpressed/images:
argumentsInScheme.png
bigFlags.png
callHierarchy.png
callersMenu.png
chooser.png
config.png
createdTester.png
dataOrUrl.png
ipadportraitoverlay.png
listOfPepBoys.png
listWithSectionHeaders.png
littleFlags.png
looksLikeADuck.png
newTester.png
outlineIndicatorsWrong.png
outlineIndicatorsWrong2.png
perfectAfterHack.png
pickAPeppa.png
rootOnly.png
sandboxAccountOnDevice.png
selfSizingStringDrawer.png
simpleList.png
split1.png
split2.png
splitViewControllerPadLandscape.png
tableViewAsChoice.png
threecolumns.png
twoPossibilities.png
twoscreensphone.png
variableRowHeights.png
workingOutline.png
正如你所看到的,主文件夹本身大部分为空。所有文章都在 wordpressed 中,包括它们的图片在 wordpressed/images 中。
现在,这里是 home-base
:
$ git switch home-base
Switched to branch 'home-base'
Your branch is up to date with 'origin/home-base'.
$ ls -1 -R
GetStartedWithPods.md
README.md
Swift52notes1.md
Swift52notes2.md
Swift52notes3.md
dan
debuggingLinks.md
images
logging.md
miscSwiftTricks1.md
miscSwiftTricks2.md
miscSwiftTricks3.md
miscSwiftTricks4.md
packages.md
wordpressed
xcode12Editing.md
xcode12testing.md
xcodeWhereAmI.md
xcodeWorkInTwoPlaces.md
./dan:
bdd.md
homebase.md
./images:
chooser.png
config.png
split1.png
split2.png
./wordpressed:
images
./wordpressed/images:
正如您所看到的,这是一个更早的情况。还没有将任何内容移动到wordpressed。有一些文章漂浮在顶层,而dan文件夹中有两篇文章,包括我在这里感兴趣的homebase.md。
最后,为了完整起见,我将向您展示master
和home-base
之间的合并基础:
$ git merge-base master home-base
b5d7355fe42eddad96beb200df2cba65381c288a
$ git checkout b5d7355fe
$ ls -1 -R
GetStartedWithPods.md
README.md
Swift52notes1.md
Swift52notes2.md
Swift52notes3.md
dan
debuggingLinks.md
images
logging.md
miscSwiftTricks1.md
miscSwiftTricks2.md
miscSwiftTricks3.md
miscSwiftTricks4.md
packages.md
wordpressed
xcode12Editing.md
xcode12testing.md
xcodeWhereAmI.md
xcodeWorkInTwoPlaces.md
./dan:
bdd.md
./images:
chooser.png
config.png
split1.png
split2.png
./wordpressed:
images
./wordpressed/images:
好吧,它看起来非常像现在的home-base
,不是吗? 主要区别在于那是在 dan 文件夹中出现 homebase.md 之前。
现在,请问当我尝试将 master
合并到 home-base
时会发生什么。合并的双方都有哪些贡献? 在我的观点中,Git 应该意识到在 master
中出现了很多新文件在wordpressed,其中一些文件是原来位于顶层的文件的重命名。 当然,在 home-base
中,dan 中出现了一个新文件homebase.md 。
在我的看法中,这些贡献不应该冲突。
好的,让我们试试吧。
$ git switch home-base
$ git merge master
CONFLICT (file location): dan/homebase.md added in HEAD inside a directory that was renamed in master, suggesting it should perhaps be moved to wordpressed/homebase.md.
Automatic merge failed; fix conflicts and then commit the result.
$ git status
On branch home-base
Your branch is up to date with 'origin/home-base'.
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
deleted: dan/homebase.md
new file: instructions.md
new file: wordpressed/AppDelegateRefactor.md
new file: wordpressed/BareListContentView.md
new file: wordpressed/CellContentConfiguration.md
new file: wordpressed/ControlTargetActioniOS14.md
renamed: GetStartedWithPods.md -> wordpressed/GetStartedWithPods.md
new file: wordpressed/MultipleTrailingClosures.md
new file: wordpressed/StatesAndBackgrounds.md
renamed: Swift52notes1.md -> wordpressed/Swift52notes1.md
renamed: Swift52notes2.md -> wordpressed/Swift52notes2.md
renamed: Swift52notes3.md -> wordpressed/Swift52notes3.md
new file: wordpressed/UserInteractiveCells.md
new file: wordpressed/bdd-common-pitfalls.md
renamed: dan/bdd.md -> wordpressed/bdd.md
new file: wordpressed/brantsMenuBar.md
new file: wordpressed/collectionViewContentConfig.md
new file: wordpressed/collectionViewLists.md
new file: wordpressed/collectionViewLists2.md
new file: wordpressed/collectionViewOutline.md
renamed: debuggingLinks.md -> wordpressed/debuggingLinks.md
new file: wordpressed/diffableDataSources.md
new file: wordpressed/diffableDataSources2.md
new file: wordpressed/forwardCompatibity.md
new file: wordpressed/haptics.md
new file: wordpressed/iOS13deprecations.md
new file: wordpressed/images/argumentsInScheme.png
new file: wordpressed/images/bigFlags.png
new file: wordpressed/images/callHierarchy.png
new file: wordpressed/images/callersMenu.png
renamed: images/chooser.png -> wordpressed/images/chooser.png
renamed: images/config.png -> wordpressed/images/config.png
new file: wordpressed/images/createdTester.png
new file: wordpressed/images/dataOrUrl.png
new file: wordpressed/images/ipadportraitoverlay.png
new file: wordpressed/images/listOfPepBoys.png
new file: wordpressed/images/listWithSectionHeaders.png
new file: wordpressed/images/littleFlags.png
new file: wordpressed/images/looksLikeADuck.png
new file: wordpressed/images/newTester.png
new file: wordpressed/images/outlineIndicatorsWrong.png
new file: wordpressed/images/outlineIndicatorsWrong2.png
new file: wordpressed/images/perfectAfterHack.png
new file: wordpressed/images/pickAPeppa.png
new file: wordpressed/images/rootOnly.png
new file: wordpressed/images/sandboxAccountOnDevice.png
new file: wordpressed/images/selfSizingStringDrawer.png
new file: wordpressed/images/simpleList.png
renamed: images/split1.png -> wordpressed/images/split1.png
renamed: images/split2.png -> wordpressed/images/split2.png
new file: wordpressed/images/splitViewControllerPadLandscape.png
new file: wordpressed/images/tableViewAsChoice.png
new file: wordpressed/images/threecolumns.png
new file: wordpressed/images/twoPossibilities.png
new file: wordpressed/images/twoscreensphone.png
new file: wordpressed/images/variableRowHeights.png
new file: wordpressed/images/workingOutline.png
new file: wordpressed/inAppPurchases.md
renamed: logging.md -> wordpressed/logging.md
renamed: miscSwiftTricks1.md -> wordpressed/miscSwiftTricks1.md
renamed: miscSwiftTricks2.md -> wordpressed/miscSwiftTricks2.md
renamed: miscSwiftTricks3.md -> wordpressed/miscSwiftTricks3.md
renamed: miscSwiftTricks4.md -> wordpressed/miscSwiftTricks4.md
new file: wordpressed/multipleSelection.md
new file: wordpressed/mysteriesOfLayout.md
new file: wordpressed/newInIOS14.md
renamed: packages.md -> wordpressed/packages.md
new file: wordpressed/photoPicker.md
new file: wordpressed/protocolParadox.md
new file: wordpressed/splitViewControllers.md
new file: wordpressed/splitViewControllers2.md
new file: wordpressed/swiftTrickTwoClasses.md
new file: wordpressed/targetActionRant.md
new file: wordpressed/typescript-shape-of-things.md
new file: wordpressed/untappableButton.md
new file: wordpressed/what-vs-how.md
renamed: xcode12Editing.md -> wordpressed/xcode12Editing.md
renamed: xcode12testing.md -> wordpressed/xcode12testing.md
renamed: xcodeWhereAmI.md -> wordpressed/xcodeWhereAmI.md
renamed: xcodeWorkInTwoPlaces.md -> wordpressed/xcodeWorkInTwoPlaces.md
Unmerged paths:
(use "git add <file>..." to mark resolution)
added by us: wordpressed/homebase.md
好的,那么我不理解最后一行是什么意思。什么叫做“added by us” 是 wordpressed/homebase.md?不!那不是我们添加的位置。我们是在 dan 中添加的。
无论是
master
还是 home-base
都没有一个名为 wordpressed/homebase.md 的文件。那么 Git 从哪里得到这个想法呢?它似乎与它认为有合并冲突的原因有关:
那么:Git 在这里说了什么?为什么 Git 认为 dan/homebase.md 应该是 wordpressed/homebase.md,却找不到任何证据呢?我如何防止这种合并冲突,让 Git 更加简单化处理呢?我可以使用不同的合并策略吗?还是我该如何以这样的方式简单地解决冲突,告诉 Git:“不要管 dan/homebase.md,请离开它”?dan/homebase.md 在 HEAD 中添加在一个在主分支中被重命名的目录中,建议将其移动到 wordpressed/homebase.md。
再次对问题的详细描述表示歉意。