gpt4 book ai didi

git - 为什么 git merge 删除文件而不是移动它们?

转载 作者:太空狗 更新时间:2023-10-29 13:57:40 25 4
gpt4 key购买 nike

我有一个旧分支,我想更新它。我从 master merge ,但有三个文件已被移动,Git 说它们已“被它们删除”。

我首先尝试将文件移动到分支中的新位置,然后 merge ,但 git 只使用了分支文件,并没有尝试与 master merge 。

然后我尝试设置:

git config merge.renameLimit 999999

但我得到了相同的结果。

我还能做些什么来强制 Git 识别这些文件已被移动而不是删除?文件名相同。

最佳答案

您遇到了 Git 仅记录快照和祖先的方法的一个(真的,那个)缺点:通常,Git 可以识别重命名的文件,因为它们看起来仍然足够相似,但是如果您彻底更改文件并移动它,没有任何东西可以将结果与已删除的旧文件和新位置的新文件区分开来。

git checkout master^0                         # make a scratch commit to help Git
git mv new/path/to/file1 old/path/to/file1 # move the drastic-rewrite stuff back
git commit -m \
'put drastically-changed-and-renamed files back where automerge can find them'

git checkout oldstuff # merge the helper commit to oldstuff
git merge @{1} # ...
git mv old/path/to/file1 new/path/to/file1 # put things in their new location
git commit --amend

Git 的 merge 着眼于提示和基础。由于 master 提示中的这些文件看起来与它们在 merge 基础上与 oldstuff 所做的完全不同,并且也已拾取并移动,因此 merge 看不到它们作为相同的文件了。所以把它们放回去帮助 Git 的自动 merge ,运行 merge ,把它们移回它们的新家。

要直接回答你的标题问题,为什么 Git 只做它的快照和祖先历史,这是一个工程权衡。无论您做什么,都有缺点,您已经遇到了 Git 选择的缺点。

关于git - 为什么 git merge 删除文件而不是移动它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com