Git如何放弃对子模块的更改

4

我在一个名为X的git仓库中做了一些工作,它有一个子模块Y。我对X中的文件进行了一些更改,希望保留这些更改,但我对子模块Y进行的更改现在想要撤销。因此,我想要撤销我对子模块所做的所有本地更改。

我尝试了git checkout -- ../dep/libY,但没有任何变化。

Git状态显示:

modified:   ../dep/libY (modified content)

你是从已检出的目录根目录执行它吗,@Darragh? - kk.
3个回答

4

子模块就是一个Git仓库。因此,您可以cd进入子模块,并使用git reset --hard来丢弃在另一个Git仓库的工作树和索引中完成的工作。(一定要先在该工作树中运行git status和其他Git命令(如果需要)以确保您要丢弃的任何文件都是不需要的。)


2
警告:如果您有新的提交而不是(修改的内容),它会执行与您尝试做的完全相反的操作 :/ - user6547518

1
在您检出的目录中执行此命令,它将重置该子目录中更改的文件为HEAD版本(简而言之,它会丢弃该子模块/子目录中未提交的更改)。
git checkout HEAD -- path/to/submodule

在你的情况下,命令将是:


git checkout HEAD -- ../dep/libY 

1
如果您想撤销更改,使用git checkout submodule命令。
git checkout dep/libY

或者

进入文件夹(你想要撤销所有更改的文件夹)并执行以下操作:

git checkout ./ 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接