我有一个.git
目录的普通副本备份。我没有备份中.git
目录之外的实际文件(git status
表示将在提交时删除所有文件),只有实际的.git
目录。
当我git checkout master
时,我会得到大约一半应该存在的文件。我的印象是这应该重新创建所有项目文件。
这是否意味着git历史中的某个地方存在错误?某些文件更改明显无法解析为完整文件。如果我从包括文件在内的完整项目中获得备份,我如何“修复”我的历史记录以确保它包含所有内容?
我不是git-pro,但是解压缩到空目录的备份当前位于功能分支中。因此,根据git status
,如果我执行git commit
,将删除一百万个文件。我估计做git checkout master
会给我空目录中最新主提交中的所有文件。
答案 0 :(得分:1)
不知道为什么有一半文件丢失,但你可以试试:
git clone .git /path/to/new/repo
然后你会欺骗git相信它是一个裸存储库,并从它克隆到/path/to/new/repo
,其中master
将被检出。
在您的修改中
自上次提交以来的修改不会保留在一个分支上。例如,在您的情况下,git status
显示所有文件都被删除,更改分支然后不会"保持"这个更改在那个分支上,但是这些更改会带给你结账的下一个问题,除非你先把它藏起来。
考虑这个例子:
git init gittest
cd gittest
echo "First commit" > a
git status
Untracked files:
a
git add a
git commit -m "Initial commit"
git branch test
git checkout test
echo "Editing a" >> a
git status
modified: a
git checkout master
M a
Switched to branch 'master'
git status
modified: a
cat a
First commit
Editing a
这里我在master中工作并提交第一个提交,然后更改分支以进行测试,编辑a
,然后移回master,看看,更改是保留的!这就是您所发生的事情,在您的功能分支中,所有文件都被删除,当您签出master时,您也会将这些更改(删除的文件chanes)带到master。
如果您想取消删除文件,可以使用以下答案How do I revert all local changes in Git managed project to previous state?中描述的内容:
git checkout .
git reset
# vìola
答案 1 :(得分:1)
更好更安全的选择是:
将.git dierctory的内容复制到新目录中
cd进入新目录并运行git config --bool core.bare true
这将使新目录成为一个简单的仓库
现在运行git clone <URL-To-Bare> <New-repo>
希望它能解决问题!
答案 2 :(得分:1)
Git stash会撤消工作副本上的所有更改(包括已删除的&#39;文件)将您的文件全部恢复为工作副本
git stash
同样的结果就像你使用&#34; git clone&#34;再次
在此之后,如果要删除最近创建的存储,可以执行以下操作:
git stash drop stash@{0}
我不建议删除藏匿物,因为您最初不知道何时需要藏匿信息,因为藏匿物并没有真正占用太多空间(在同一结构中内部表示的藏匿处)作为提交对象)