Git恢复文件

时间:2019-03-28 15:28:00

标签: git git-rm

我将本地文件添加到git repo(git add .)中并提交。

然后使用git rm *删除文件并再次提交(第二次提交)。该删除了本地和远程文件。

是否热衷于从git(从第一次提交)将文件恢复到同一本地文件夹?

谢谢。

4 个答案:

答案 0 :(得分:5)

自从提交以来,本地文件甚至不存在于分支HEAD上的文件系统中都没有关系,因为它是Git历史记录的一部分。要从先前的提交中检索文件,您可以尝试将其检出:

git checkout abc123 -- path/to/some/file.ext

其中abc123是较早提交的SHA-1哈希。如果您不知道SHA-1哈希是什么,只需从bash中运行git log,然后找到较早的提交以及该提交的哈希即可。

编辑:

如果您确实想将整个分支还原为某个较早的提交,则通常安全的方法是通过git revert。因此,继续上面的示例,如果您想还原最新的提交abc123,则可以尝试:

git revert abc123

这将在分支的顶部添加一个 new 提交,但是它将在功能上撤销先前的HEAD提交所做的任何操作。这应该使项目中的所有文件都保持其早期状态。

答案 1 :(得分:2)

export const AppContext = React.createContext<Array<[AppState, Dispatch<AppAction>]> | null>(null);

将使分支返回一次提交,并相应地更新工作树(还原文件)。

这时,如果您已经推送了先前的状态,则只需使用git reset --hard HEAD^ 推送到远程。

但是,如果您处于HEAD分离状态,则将无法正常工作,您必须将其签出(请参阅Tim的回答)。

答案 2 :(得分:2)

如果您仅提交已删除的文件,则至少有两个选择:

  1. 创建一个新的提交以还原旧的提交

    git revert HEAD
    git push
    
  2. 将分支重置为上一次提交。

    git reset --hard HEAD
    git push -f
    

    请注意,第二个选项完全具有破坏性。如果您在上一次提交中添加了任何其他更改,则所有这些更改也将撤消。另外,如果您与同一分支上的另一个团队成员一起工作,那么git push -f会给他们带来麻烦。 这只能用作万不得已的方法,或者如果您确定不会为他人弄乱。

答案 3 :(得分:1)

要返回提交git reset HEAD~1,然后将其推送到源git push -f origin branch_name