好,所以我误删除了一个文件夹,然后推送了更改
然后我回复了原位,并committed again, and
按下了
然后我继续工作了两个月
现在我注意到,我的所有注释基本上都读为“谁误删除了”
有没有一种方法可以只删除删除文件夹以及删除的还原,并保留其他所有内容?
我自己一个人工作,没有团队成员,也不必担心退房等问题
答案 0 :(得分:1)
有没有一种方法可以只删除删除文件夹以及删除的还原,并保留其他所有内容?
不清楚您的意思是“仅删除删除文件夹”
还原删除
# Undo any change based upon the commit SHA1 (or multiple)
git revert SHA-1 SHA-2 ... SHA-N
现在我注意到,我的所有注释基本上都读为“谁误删除了”
git log -n 1 -- <file path>
现在使用此SHA签出所需内容
git checkout <SHA-1> -- <path>
答案 1 :(得分:1)
由于您是此处的船长(如您所述,可以重写历史记录),因此我建议在此处交互式重新部署 *。 (doc)
在开始之前,由于这是一项棘手的操作,正如LasseVågsætherKarlsen right below所提醒的那样,强烈建议您备份分支(使用git branch <backupBranch> <originalBranch>
例如)。
首先通过git log
搜索两个提交的SHA-1散列(删除和取消删除)。 (我假设您可以这样做,但如有需要,可以随时询问该部分的详细信息。)
然后使用
git checkout <yourBranch>
git rebase -i <deletionCommit>^
(请注意插入符号从删除提交之前 开始从提交开始进行交互式重定基础)
您将获得一个打开的编辑器,其中包含从指定点到HEAD的提交列表,并带有关键字:
pick 295ea4a Some commit message
pick 9cb2b54 Some other commit message
pick fe91df1 Yet another commit message
现在将pick
更改为drop
,以删除两个提交,然后关闭/保存编辑器。
并使用
完成变基git rebase --continue
(如果有任何遗漏,请在重新开始基准测试之前使用git rebase --abort
还原内容)
最后,不要忘了下次您需要git push -f <remote> <branch>
来更新旧的引用,因为该行中的每次提交都会有所不同,因为仅由其父母的引用会有所不同
*(因为2个月后,您提交的次数可能很多,所以git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>
可能非常繁琐,而交互式rebase基本上可以做到这一点)