我当前的分支已将某些文件移动到不同的文件夹,并且创建的存储库已对位于旧文件夹中的文件进行了更改。如何在不破坏任何东西的情况下正确应用存储,并且想知道最简单的方法。
答案 0 :(得分:3)
我看到了一些简单的步骤:
将部分文件(仅git stash show
所需的文件)移回旧地方:
git mv file old_place/file
将存储应用于这些文件:
git stash pop
合并更改(如果有):
vim ...
git add ...
将文件移回适当的位置:
git mv old_place/file file
之后,您将使用 stash 添加到 index 文件中。
答案 1 :(得分:1)
我当前的分支已将某些文件移动到不同的文件夹,并且创建的存储库已对位于旧文件夹中的文件进行了更改。
这是典型的git stash试图检测已移动/重命名的文件 这不再是Git 2.12(2017年第一季度)的问题:
commit 9d4e28e见Jeff King (peff
)(2016年12月6日)
(Junio C Hamano -- gitster
--合并于commit db09f21,2016年12月19日)
stash
:更喜欢管道git-diff
:启用
diff.renames
配置时(使用Git 2.9及更高版本, 它默认启用,这使情况更糟),"git stash
"如果删除文件并添加了另一个内容非常相似的文件,则行为不端。创建存储时,我们需要查看工作树和HEAD之间的差异,并使用git-diff瓷器进行操作。
由于git-diff
默认情况下启用了瓷器配置,因此至少会出现一个问题。--name-only
格式不会提及重命名的源端,这意味着我们将无法隐藏删除 重命名的一部分。我们可以通过传递
--no-renames
来解决这个问题,但这是一个更大问题的症状。我们应该在这里使用diff-index
管道,默认情况下没有启用重命名,也不尊重任何管道 可能令人困惑的配置选项。
这意味着以下内容将起作用:
mv file renamed &&
git add renamed &&
git stash &&
git stash apply
将要恢复的内容是名为' renamed
'的文件,而不是名为' file
'的文件。 (在renamed
之前移动为&{39; git stash
'