我和一位朋友分别在一个项目上工作。起初,我推了一个名为old-name
的文件夹,然后他从中取出。在其中间,我决定将old-name
文件夹重命名为new-name
,以便更好地将其与其他项目区分开来(我们只是说old-name
过于通用而且new-name
更多具体)。所以我告诉我的朋友将他的项目文件夹重命名为new-name
。然后我们分开工作。
现在,他将他所做的工作推到了远程服务器上(在new-name
文件夹下),当我尝试从服务器拉出时,所有这些冲突(重命名/添加)都会发生,显然每个都有一个额外的副本现在new-name
项目中的单个文件。
new-name/index.php (MINE)
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe)
我的问题是,如果没有这个git冲突重命名问题,我们如何才能解决这个问题?当然我可以手动解决冲突,但是由于git已经将这个新的额外副本提取到我的仓库,因此检查和删除的文件太多了。
由于
答案 0 :(得分:1)
只需添加所有文件即可。任何简单重命名都将被识别为没有差异并从索引中删除。因此,即使'git status'显示负载和大量问题,在'git add -A'之后仍然会有很少的剩余(并且所有剩余的将具有真正的差异)。您应该立即检查一个新的分支(在'git add -A'之前),以便您可以轻松地回溯它是否向南。
答案 1 :(得分:1)
只是一个猜测,但听起来像Git的重命名检测在合并时没有检测到重命名。这个目录中有很多文件吗?是否所有文件都经过大量修改?
尝试在增加merge.renameLimit
或diff.renameLimit
配置设置的值后重新执行合并/拉取。来自git help config
:
diff.renameLimit
The number of files to consider when performing the copy/rename
detection; equivalent to the git diff option -l.
merge.renameLimit
The number of files to consider when performing rename detection
during a merge; if not specified, defaults to the value of
diff.renameLimit.
您还可以尝试-Xrename-threshold=70
降低重命名相似性检测阈值。来自git help merge
(也在git help pull
):
rename-threshold=<n>
Controls the similarity threshold used for rename detection.
See also git-diff(1) -M.
来自git help diff
:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the
similarity index (i.e. amount of addition/deletions compared to the
file’s size). For example, -M90% means git should consider a
delete/add pair to be a rename if more than 90% of the file hasn’t
changed.
请注意,我不确定在Unix样式和Windows样式之间转换行结尾时会发生什么。 Git可能认为文件是100%不同的,即使唯一的区别是行结尾,所以请确保你们都使用相同的行结尾。
答案 2 :(得分:0)
您应该将新的工作副本下拉到新的本地文件夹,紧挨着您首先使用的代码。然后使用Diff style tool比较并将您的工作合并到新的本地副本中。然后在新的pull down和bam上提交更改,您已提交更改。我知道这并没有保存你所做的所有更改日志,但如果手动执行它不是一个选项,那么这是下一个最好的事情。