我想在git中恢复一个目录 - 恢复里面的所有文件,以及删除自提交以来添加的任何文件。结帐只是满足我的第一个要求,但不删除任何文件。
答案 0 :(得分:15)
我找到了最简单的解决方案。
git rm /path/to/dir
git checkout <rev> /path/to/dir
git commit -m "reverting directory"
然后删除所有未跟踪的文件。
git rm
中删除文件
git checkout
更新工作树中的文件以匹配索引或指定树中的版本。 https://www.git-scm.com/docs/git-checkout
git commit
的更改
答案 1 :(得分:5)
仅删除git上的文件夹及其内容
git rm -r --cached myFolder
删除git和本地
上的文件夹git rm -r myFolder
然后提交并再次推送
恢复到之前的提交
#reset to previous commit, replace with your commit hash code, you can find it from your commit history
git reset {commit hash}
#moves pointer back to previous head branch
git reset --soft HEAD@{1}
git commit -m "Reverted commit to blah"
#update your working copy
git reset --hard
恢复部分提交 在这种情况下,您需要恢复到特定的提交并添加补丁
#reset to previous commit, but don't commit the changes
$ git revert --no-commit {last commit hash}
# unstage the changes
$ git reset HEAD .
# add/remove stuff here
$ git add file
$ git rm -r myfolder/somefiles
# commit the changes
$ git commit -m "fixed something"
# check the files
$ git status
#discard unwanted changes
$ git reset --hard
答案 2 :(得分:1)
要进行恢复,使其与
中的内容相匹配首先从暂存区域中取出目录
git rm --cached -r <directory>
现在只读一下那个目录
git read-tree <old SHA>^{tree}:<directory> --prefix=<directory>
然后提交
git commit -m "reverting <directory>"
然后只丢弃剩余的工作目录更改。
答案 3 :(得分:0)
最佳答案是好的,但我想简化一下。
git rm -r /path/to/dir
git checkout <rev> /path/to/dir <-- the <rev> is the git commit id
git commit -m "reverting directory"
除了我的签出命令是:
git checkout 70157c4f57aa21307cd96f146f8e98b808e1aada ./WebRoot
我在命令行上的一个名为Memento的目录中,并且用一个点表示git commit信息将进入的新目录将位于Memento文件夹中。
我正在检查提交到该文件夹的内容。