我有一个与谷歌云端硬盘同步的回购,但我忽略了.git目录,现在它已上传到谷歌云端硬盘。
最近我格式化了我的Gentoo
计算机,在我再次同步所有Google云端硬盘文件后,我发现.git
目录不在那里。
问题是我不记得我是否在本地没有被推到github的一些未经标记/未经修改的更改。
我一直在搜索,但我只找到了相反问题的答案(克隆没有.git
目录)
在我确定可能的本地更改不会丢失之前,我不想制作git clone
我的回购。
是否有任何方法只能克隆.git
文件夹,然后推送我机器中可能存在的任何本地更改?
答案 0 :(得分:13)
一步解决方案是:
git clone --no-checkout <repo_url>
或者如果你已经有一个空的目录,
cd myrepo
git clone --no-checkout <repo_url> .
答案 1 :(得分:5)
我解决了。这是一个简单的过程:
/tmp
).git
文件夹复制到我的原始仓库文件夹git status
,所有本地更改都在那里。希望它有助于其他人
答案 2 :(得分:2)
git clone
发送到您计算机上的其他文件夹答案 3 :(得分:1)
基本上,您想要的是一个全新的.git
目录,而文件没有任何更改,因此您可以执行git status
并查看是否有任何更改。
期望pwd
是项目目录,其中包含一个旧的.git
目录,该目录具有用于存储库设置的origin
,您可以运行以下命令:
mkdir -p /var/www/tmp/_delme \
&& git clone --no-checkout `cat .git/config | grep url | awk -F' = ' '{print $2}'` /var/www/tmp/_delme \
&& rm -rf .git \
&& mv /var/www/tmp/_delme/.git . \
&& git add -A
&& rm -rf /var/www/tmp/_delme
答案 4 :(得分:0)
正如在另一个答案中所说的,--no-checkout
命令有一个 git clone
选项,但这不是问题的直接或完整解决方案:
因此,如果您只是将 .git
目录移动到您的工作树中并运行 git status
,您将得到一个不正确的结果:
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
deleted: Home.rest
Untracked files:
Home.rest
话虽如此,有两种方法可以解决这个问题:
$ git clone -n <repo_url> tmp
$ mv tmp/.git/ . && rm -d tmp
$ git read-tree HEAD
$ git init
$ git remote add -m master -f origin <repo_url>
$ git reset refs/remotes/origin/HEAD
$ git branch -u origin
如果有更多人使用同一个存储库(也有一些远程更改),您将很难figuring out which state your local repository was in。
另一方面,如果您确定没有本地更改,只需删除您的工作树并进行完整克隆会更容易:
$ rm -rf <local_repo_dir>
$ git clone <repo_url> <local_repo_dir>
答案 5 :(得分:0)
如果我有一个名为 local_directory
的目录,我会在 github 中创建一个名为 remote_local_directory
的新存储库。我想将 local_directory 推送到 remote_directory。
我使用这些命令
git clone --bare ${remote_directory}.git local_directory/.git
cd local_directory
git init
git add .
git commit
git push --set-upstream origin master
git clone --bare
只克隆 .git
目录
和 git init
将重新初始化本地存储库
使用其他git命令,如本地仓库与远程相关。