我删除了文件夹中的所有内容,文件夹为空.我的远程仓库里还有一份副本.但是,当我做了一个git pull
它没有放回已删除的文件是不是应该这样做?
所以我做了一些研究,发现你可以通过这样做来恢复文件
git checkout <revision> -- <name of file>
但这只适用于文件.
如何检索目录中的所有文件?
Nic*_*kin 197
您可以使用文件执行的所有操作,也可以使用文件夹.
如果尚未编入索引(git add
)您的更改,则可以还原目录的内容:
git checkout -- path/to/folder
Run Code Online (Sandbox Code Playgroud)
如果删除已经编入索引,则应首先重置:
git reset -- path/to/folder
git checkout -- path/to/folder
Run Code Online (Sandbox Code Playgroud)
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
找到影响给定路径的最后一次提交.由于该文件不在HEAD提交中,因此该提交必须已将其删除.
git rev-list -n 1 HEAD -- <file_path>
Run Code Online (Sandbox Code Playgroud)
然后使用caret(^
)符号检查之前提交的版本:
git checkout <deleting_commit>^ -- <file_path>
Run Code Online (Sandbox Code Playgroud)
git reset --hard <revision>
Run Code Online (Sandbox Code Playgroud)
您可以使用 git restore 恢复文件或文件夹。
git restore --source master~1 "PATH_IN_YOUR_REPO"
Run Code Online (Sandbox Code Playgroud)
在这里, master~ 1将您的文件夹从您的主分支恢复为“1”修订版。
来源:https : //git-scm.com/docs/git-restore
如果尚未提交更改,则可以还原内容或目录:
git checkout -- removed_directory
Run Code Online (Sandbox Code Playgroud)
如果要还原所有更改,请执行以下操作:
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
唯一对我有用的是在另一个文件夹中签出 repo。假设当前的 repo 在/home/me/current
.
然后我做了
git clone /home/me/current /home/me/temp
Run Code Online (Sandbox Code Playgroud)
这使 repo 的单独克隆在 /home/me/temp
我现在可以/home/me/temp
去做任何我想做的事。例如
git reset --hard commit-hash-before-delete
Run Code Online (Sandbox Code Playgroud)
现在我可以将删除的文件夹复制回来
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
Run Code Online (Sandbox Code Playgroud)
并删除临时文件夹
rm -rf /home/me/temp
Run Code Online (Sandbox Code Playgroud)
的例子
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
Run Code Online (Sandbox Code Playgroud)
不工作
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
其他例子如
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
破坏性不仅仅是删除的文件。任何其他更改也将丢失。
相似地
git reset --hard some-commit
Run Code Online (Sandbox Code Playgroud)
之后将丢失任何提交 some-commit
小智 5
从 git 2.24.0 开始,有一个实验性的新 git 命令:git restore
git restore --staged some/deleted/folder
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66251 次 |
最近记录: |