所以在我看来,最基本的git操作可以在没有遥控器的情况下有效地完成。即。你可以添加,你可以毫无问题地提交。
似乎没有遥控器的git repo的最大问题是像git reset
这样的东西。就像你想要将你的代码恢复到二十次提交之前的特定提交 - 只是为了测试是否有某些东西可以用来做某事 - 看起来你似乎无法做到。你做了git reset --hard ...
,然后你失去了二十个最新的提交,没有办法让他们回来。
还有什么不行?
答案 0 :(得分:4)
有多种方法可以避免您担心的问题。
您可以像@mamapitufo建议的那样积极主动,并在执行git reset --hard
之类的任务之前创建分支。这很好,只要你记得经常这样做。
如果你不是透视,请在意识到丢失了一些你想要的提交后使用git reflog
。 git
保留了无法访问的提交,即在存储库中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
重新设置,然后返回。
但请记住,不包括未提交的文件或未跟踪的文件。