首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git stash和pop显示文件不再标记为已移动?

git stash和pop显示文件不再标记为已移动?
EN

Stack Overflow用户
提问于 2011-12-14 03:38:14
回答 2查看 5.8K关注 0票数 37
代码语言:javascript
复制
git mv file1 file2

git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    file1 -> file2

git stash
git stash pop

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   file2
#
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    file1

正如您所看到的,git在stash / pop之后丢失了重命名后的关系。有没有办法重新获得这种关系,或者让stash知道文件被移动了?我经常隐藏我的系统状态,看看我的系统状态在更改前是什么样子,但是让它失去重命名关系对我来说是一个问题。除了删除新文件,再次执行git mv,并替换新文件的内容之外,我不知道如何修复它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-14 05:04:05

如果你还没有弹出你的你的藏品,做:

代码语言:javascript
复制
git stash pop --index

这样可以正确地在存储中保留已移动(但未提交)的文件关系。根据git help stash的说法

索引如果使用了--

选项,则不仅尝试恢复工作树的更改,还尝试恢复索引的更改。但是,当您有冲突时(冲突存储在索引中,因此您不能再按原来的方式应用更改),此操作可能会失败。

如果你已经打开你的仓库,并想要重新创建移动的关系,请执行以下操作:

代码语言:javascript
复制
git rm --cached file1

这将从索引中删除“旧的”未移动的文件:

使用此选项仅从索引

中取消转移和删除路径

票数 47
EN

Stack Overflow用户

发布于 2011-12-14 04:05:44

简短的回答:git rm --cached file1

git mv真正要做的就是(在文件系统上)重命名文件,然后将文件删除和创建添加到索引(登台区域)中。没有特别的标记。其他机器随后通过看到以前称为file1的内容现在称为file2,从而意识到这是一个重命名。

因为git stash命令会修改索引,所以它们可能会扰乱事情。请注意,现在您有了创建阶段,但没有删除!(通常情况下,git-stash会在弹出后保留所有未暂存的文件,但在这种情况下,我认为它别无选择,只能将新文件放入索引中,以避免您不知道该保留哪个文件。您可以避免在git stash pop --index中发生这种情况,但是如果不能干净地应用隐藏的更改,那么这种情况就会消失,因此它不是默认的。) git status不可能再将其显示为重命名,因为重命名实际上在索引和工作树之间拆分,并且这两个部分都不能完全声明它。

只需运行git rm --cached file1来暂存删除(即从索引中删除file1 ),它将再次显示为重命名。您还可以运行git add -u自动添加更改,前提是您没有不想暂存的其他更改。

请注意,这意味着在实践中你不需要担心:当你正确地准备提交所有的东西时(例如使用git add -u),“问题”就会自己解决。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8495103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档