没有远程回购的git的可行性

时间:2013-12-02 15:11:34

标签: git

所以在我看来,最基本的git操作可以在没有遥控器的情况下有效地完成。即。你可以添加,你可以毫无问题地提交。

似乎没有遥控器的git repo的最大问题是像git reset这样的东西。就像你想要将你的代码恢复到二十次提交之前的特定提交 - 只是为了测试是否有某些东西可以用来做某事 - 看起来你似乎无法做到。你做了git reset --hard ...,然后你失去了二十个最新的提交,没有办法让他们回来。

还有什么不行?

3 个答案:

答案 0 :(得分:4)

有多种方法可以避免您担心的问题。

您可以像@mamapitufo建议的那样积极主动,并在执行git reset --hard之类的任务之前创建分支。这很好,只要你记得经常这样做。

如果你不是透视,请在意识到丢失了一些你想要的提交后使用git refloggit保留了无法访问的提交,即在存储库中30天内无法从任何分支提示找到的提交。 git reflog branch-name显示指定分支头部的所有最近更改,然后您可以再次使用git reset --hard返回到原来的位置。

您可以使用git checkout sha1在历史中移动,而无需更改分支提示。完成探索后,使用git checkout branchname与分支机构同步。

最后,如果所有其他方法都失败了,您可以使用git fsck查找悬空提交。如果git fsck找不到您想要的提交,那么只有它可能已从存储库中清除。

顺便说一句,远程存储库可以是同一台机器上的另一个存储库,因此即使没有网络,您仍然可以使用git的远程存储库功能。

答案 1 :(得分:2)

您可以创建一个指向您想要的特定提交的分支并切换到它:

git checkout -b test-branch <commit-id>

当你完成它后,你可以摆脱分支:

git checkout master
git branch -d test-branch

答案 2 :(得分:1)

我从未重新进行测试,只是结帐到那个提交,是的,你将处于超级头模式,但是谁在乎,你只是在测试,如果你决定要重置然后再做。我总是这样做

git checkout HEAD~

这意味着从当前头部返回1提交,当我完成时,我可以简单地结帐回到分支名称,因为它仍然指向原始提交

git checkout master # or any other branch

并从当前提交中创建一个新分支

git branch some-new-name

如果你需要创建一个新的分支并checkout,你可以{@ 1}}像@mamapitufo建议的那样,但不需要提交id,默认情况下它需要当前的HEAD作为新的分支。

作为旁注,即使你不想创建一个遥控器,在其他地方有另一个备份是有用的,这是“遥控器”,遥控器可能是同一个硬盘中的另一个文件夹,或者网络文件夹,或网络电脑,只是想到不喜欢不把所有鸡蛋放在一个篮子里。

PS:实际上checkout -b会起作用,因为默认情况下git不会立即删除任何内容,如果你真的想要重置,如果你还有旧的提交哈希您可以通过执行git reset重新设置,然后返回。

但请记住,不包括未提交的文件或未跟踪的文件。