【问题标题】:git-only command to restore a directory to a commit stategit-only 命令将目录恢复到提交状态
【发布时间】:2016-10-20 13:03:42
【问题描述】:

我想从我的 git 存储库的历史记录中(递归地)恢复整个目录(完全像 this question)。

我知道正确的git命令是:

git checkout [tree-ish] -- path/to/the/folder

但是我有一个问题:要将现有目录恢复到提交状态,首先应该删除目录的内容。在其他情况下,不会删除旧提交中不存在的现有文件。 所以,要获得我想要的,我必须执行以下命令:

rm -Rf path/to/the/folder
git checkout [tree-ish] -- path/to/the/folder/

(参见this answer 和 cmets)。

我想知道是否有一个git-only命令来实现上述两个命令的相同行为,以避免手动制作rm

编辑: 我不想在结帐后删除未跟踪的文件或清理,我没有它们。我想恢复一个文件夹,就像之前提交的一样,删除添加的文件,恢复删除的文件等等。

【问题讨论】:

  • 你可以在git checkout之后做“git clean -xdf”。
  • 不,我不使用 rm 来删除我的 repo 中未跟踪的文件,我必须在结帐之前这样做才能进行“真正的”结帐:我想恢复我的文件夹完全处于某个提交之前的状态。如果我没有在 checkout 命令之前删除我的文件夹,我将处于混合情况,其中旧提交中不存在的现有文件仍在文件夹中
  • @Rowandish 我现在看到了。所以你想要git checkout <tree-ish> 的效果(没有任何路径)但是对于给定的路径/子目录,对吧?
  • 你想避免rm的原因是什么?

标签: git restore git-checkout


【解决方案1】:

如果你只想避免手动删除文件,那么你可以创建 git-command-name 文件

 #!/bin/bash
 # main, path as argument...
 rm -Rf path/to/the/folder 
 git checkout [tree-ish] -- path/to/t

把它放到 user/bin 中,git 会识别为你可以调用的 git 命令

git 命令名 [path/to/the/folder]

【讨论】:

  • 我不能接受它,因为它不是一个 git 框架原生命令,但肯定是 +1 !
猜你喜欢
  • 2011-06-27
  • 2011-08-30
  • 2017-09-18
  • 1970-01-01
  • 2013-04-28
  • 2012-11-08
  • 2016-06-23
  • 2011-10-11
  • 2014-03-04
相关资源
最近更新 更多