如何在Git中检出文件夹的旧版本

8

我需要从源代码库中拉取更改,但是有一个库更新到了最新版本,并且导致了我的应用程序崩溃。我想拉取最近的更改,然后只回到包含问题库的一个文件夹的以前(或指定的)版本。有什么办法可以做到这一点吗?


1
如果有人想知道如何在不覆盖当前版本的情况下查看旧文件,这可能很有用:git show 19bf5f6:someFile.java - Sridhar Sarnobat
2个回答

13
git checkout LAST_WORKING_COMMIT -- vendor/library/in/question

这将检出版本为LAST_WORKING_COMMIT的文件夹。不过,git status命令会显示文件已被修改:

这会检出LAST_WORKING_COMMIT版本下的文件夹。但是,git status指令会提示文件已被修改:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   vendor/library/in/question/file.exe
#
no changes added to commit (use "git add" and/or "git commit -a")

那正是我需要的。谢谢。有没有什么办法让这些更改的文件不自动添加到索引中? - solgar
git update-index --assume-unchanged vendor/library/in/question 做的就是这个。不是一个非常直观的命令 :-(。要撤销:git update-index --no-assume-unchanged vendor/library/in/question - Boldewyn
对于修改过的文件效果很好,但似乎在LAST_WORKING_COMMIT之后添加的文件将不会被删除。 - luator
是的(这通常是git中体面的做法),但您可以在命令前加上rm -fr vendor/library/in/question以获得该结果。 - Boldewyn

7

使用额外的参数来执行git checkout命令:

git checkout REV -- folder

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