带回我在git中本地删除的文件

时间:2019-08-29 17:08:38

标签: git

在从Subversion建立迁移的过程中,我已经有了一个本地存储库(没有远程存储库)。

其中有很多标签,并且一切都很好,即我一直在运行git add . -A,然后运行一次提交,然后运行git tag -a,等等。

我想做的是取回每个标签中的代码,以便与我在另一个文件夹中的库进行比较,因此我做了我在Subversion中要做的事情,删除了文件/文件夹,切换到我想要的标签( git checkout v1.0.0等),然后等效于 update 将v1.0.0等带回到工作文件夹中。

完成此操作后,我意识到它认为我现在想使用大量删除操作来更新标签。

所以,长话短说,我该如何找回我的文件,即像使用Subversion'Update'那样还原文件:)

之所以这样做,是因为我想每次都从一个干净的文件夹开始,而不是签出到当前版本已满的文件夹中。

谢谢。

4 个答案:

答案 0 :(得分:4)

  

所以我做了我在Subversion中要做的事情,删除了文件/文件夹,切换到我想要的标签(git checkout v1.0.0,等等),然后进行了等效的更新以恢复v1.0.0,等等。

Git不是Subversion。从Subversion切换到Git是重新了解什么是版本控制的过程。

在Git中不需要进行任何删除和更新。只需git checkout v1.0.0。在Git中签出旧版本完全正常。 What is Git? in the Pro Git book可能有助于阅读。

  

完成此操作后,我意识到它认为我现在想使用大量删除操作来更新标签。

假设您没有执行git addgit rm,请执行git checkout .将所有已更改和已删除的文件恢复为已提交的版本。

清除所有更改的更通用的方法是git reset --hard HEAD。这将同时还原您的工作目录并清除暂存区。

答案 1 :(得分:3)

如有疑问,请运行git status,因为它会提示您下一步操作。

# 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:    my-important-file
#       deleted:    another-important-file
#

所有命令合而为一,

git checkout -- my-important-file another-important-file

Git喜欢递归地进入目录。

git checkout -- .

有时候您想让大狗吠叫。

git ls-files -d -z | xargs -0 --no-run-if-empty git checkout --

答案 2 :(得分:2)

首先,除非您使用的是git <2.0.X,否则无需使用git add . -A,这是自git 2.0.0起的默认行为

为了“找回”您以前的内容,请阅读此答案,并将git resetgit reflog一起使用

How to move HEAD back to a previous location? (Detached head) & Undo commits


  

之所以这样做,是因为我想每次都从一个干净的文件夹开始,而不是签出到当前版本已满的文件夹中。

那么为什么不从必需的标签中签出呢?

git checkout -b <new branch> <tag>

答案 3 :(得分:0)

对于有关还原文件的直接问题,您已经有了很好的答案,但是我想指出问题的根源...

  

我想做的是取回每个标签中的代码,以便与我在另一个文件夹中的库进行比较,因此我做了我在Subversion中要做的事情,并删除了文件/文件夹,切换到我想要的标签( git checkout v1.0.0等),然后进行等效的更新以将v1.0.0等带回到工作文件夹中。

您当然可以 通过将两个版本都放在计算机上的某个位置,然后手动或使用diff工具进行比较来查看项目的不同版本之间的差异,但是自git版本库中的版本,您通常不需要这样做。您可以使用git diff在提交,分支,标签,单个文件或跨时间段之间进行比较。我将显示一些示例,但是文档页面的底部已经足够了(或者只需键入git diff --help并滚动到底部)。而且,如果要比较的版本存储在Github中,则可以easily compare them,而无需将这些版本下拉到计算机上。