在单个存储库中:
您应该能够使用 探索差异git diff -- Vendor/JSONKit
,但如果您只想重置文件(并放弃更改),请发出以下命令:
git checkout HEAD -- Vendor/JSONKit
Vendor/JSONKit
这将检查您工作目录中的最新版本并放弃修改。
在带有子模块的存储库中:
Git 子模块允许您将 git 存储库相互嵌入。假设“JSONKit”是“MyApp”中的一个子模块。顶级 git 存储库MyApp
仅跟踪 的HEAD
提交JSONKit
,因此您可以在历史的任何时候完美地重建MyApp
' 和JSONKit
' 的状态。
假设您在JSONKit
存储库中提交了更改。在里面JSONKit
,这看起来像一个正常的差异并且有一个正常的历史。在父存储库中MyApp
,它将注册为对HEAD
提交的更改。它可能看起来像这样的差异,取自git scm 文档。本例中的子模块是一个名为“rack”的目录。
$ git diff --cached rack
diff --git a/rack b/rack
new file mode 160000
index 0000000..08d709f
--- /dev/null
+++ b/rack
@@ -0,0 +1 @@
+Subproject commit 08d709f78b8c5b0fbeb7821e37fa53e69afcf433
如何MyApp
知道哪些目录是子模块?它在.gitmodules
文件中被跟踪。cat
它,你会看到注册的每个子模块MyApp
:
$ cat .gitmodules
[submodule "rack"]
path = rack
url = git://github.com/chneukirchen/rack.git
当您发出 时,您告诉 git 检查父存储库索引中的git submodule update
最新HEAD
提交,从而放弃子模块存储库中的更改:JSONKit
update
Update the registered submodules, i.e. clone missing submodules and checkout the commit specified in the index of the containing repository. This will
make the submodules HEAD be detached unless --rebase or --merge is specified or the key submodule.$name.update is set to rebase, merge or none. none
can be overridden by specifying --checkout.