我知道,在移动文件时,您需要git add
“新”文件和git rm
“旧”文件,以便git可以将其视为已重命名而不是删除...但是您如何解决未正确完成的(推送)提交?
我直接在Visual Studio中进行了提交,但没有引起足够的重视-它重命名了多个文件,它们现在显示好像已删除旧文件并添加了新文件,而不是重命名了旧文件。我只有在多次提交之后才意识到这一点。有办法解决吗?
(还有一个额外的问题-为什么Visual Studio无法正确处理此问题,而又如何在下次使用它而又不必使用单独的终端命令的情况下呢?)
答案 0 :(得分:0)
(在执行此操作之前,请先复制库,否则可能会破坏某些内容)
在新分支(NB)中签出当前代码。在重命名之前重置为提交。 再次使用git mv重命名所有内容。提交这个。 然后,您便可以从NB开始在当前分支的顶部进行选择/重播提交。
如果您这样做,则由于重写了历史记录,因此您必须将代码强制推送到服务器。这意味着拉出您的代码的任何人都会遇到错误,并且必须重新拖动/会发生冲突。
答案 1 :(得分:0)
我知道,在移动文件时,您需要git添加“新”文件,并git rm“旧”文件
您可以通过一个命令来实现
user
我只有在多次提交之后才意识到这一点。有办法解决吗?
是的
现在让我们详细解释什么和如何。
首先,让我们了解git mv
是如何存储文件名的,以及为什么新手用户会看到“问题”。
git
不在乎存储内容时的文件名。git
git都会计算内容的git add
并将其存储在SHA-1
文件夹中.git/objects
中的blob
。 git
的内容如下:
.git/object/<SHA-1>
文件名存储在其他位置,在这里解释太久。简而言之git将文件列表及其blob<single white space><Content length><null><content>
存储在名为SHA-1
Git在提交之前会生成文件列表(称为快照)。
要查看文件的tree
:
SHA-1
现在我们已经简要说明了git存储文件的方式,我们可以解释出了什么问题。
由于
git ls-tree -l <commit id>
不在乎您的文件名,它们仅用于将内容写入本地文件系统,因此它们存储在其他位置。
“移动” 文件git会将其视为新文件,结果是删除“旧”文件并“查找”新文件