Git - 如何将整个目录还原为特定提交(删除任何添加的文件)

时间:2014-09-25 21:39:21

标签: git

我想在git中恢复一个目录 - 恢复里面的所有文件,以及删除自提交以来添加的任何文件。结帐只是满足我的第一个要求,但不删除任何文件。

4 个答案:

答案 0 :(得分:15)

我找到了最简单的解决方案。

git rm /path/to/dir
git checkout <rev> /path/to/dir
git commit -m "reverting directory"

然后删除所有未跟踪的文件。

git rm
  
    

从工作树和索引https://git-scm.com/docs/git-rm

中删除文件   
git checkout 
  
    

更新工作树中的文件以匹配索引或指定树中的版本。 https://www.git-scm.com/docs/git-checkout

  
git commit
  
    

记录对存储库https://www.git-scm.com/docs/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文件夹中。

我正在检查提交到该文件夹​​的内容。