Git中有哪些操作很难/无法撤消?
Git的优势之一是,因为它使用指针进行操作,所以撤消一系列广泛的任务(包括删除提交或提交或创建和删除远程分支)相对比较容易。 在很多情况下,你真正需要做的就是正确地将当前分支的HEAD指针重置到所需的位置,然后退出。 这包含了很多种情况。
除了删除整个存储库或错误的推送,最不重要的操作是什么是不可撤消的,或者在标准的Git存储库中很难撤销?
git clean
删除未跟踪的文件。 他们不能用git恢复。
合并肮脏的工作树可能会导致难以恢复的内容。
所以简而言之,没有被git跟踪的东西不能被git恢复。 其他一切都是可以恢复的。
一个难以撤销行动的例子是:
git branch -D some-unmerged-branch-such-as-master
git gc --prune=now --aggressive
第一个删除对某些提交的引用。 第二个删除没有引用的所有提交。
我希望这个问题只是闲散的好奇心问题,而不是你想诋毁某人的回购,但是由于分布式版本控制固有的冗余,我并不担心。
到目前为止,我遇到的最常见的“难以撤消”的错误之一是git的新手是滥用git stash
,因为git stash pop
并不总是可以通过git stash
翻转。 考虑:
git init /tmp/trash && cd /tmp/trash # make a new repo
echo A > A # create a file
git add A
git commit -m "Initial commit" # add and commit it
echo B > A # ... now change it
git stash # ... and stash it
echo C > A # and change it and commit it again
git add A
git commit -m "Another commit"
git stash pop # now pop the stash
pop
音乐会尝试automerge A
并引发冲突,但是您不能通过再次打git stash
退出流行音乐。 这是一个相当平凡的例子,但是如果你经常存储大量变化,并且经常切换不同分支,那么很容易陷入讨厌的地方,一路上弹出。 我相信git stash drop
也是永久性的,也就是说,如果你放弃了错误的存储,那么就没有安全网。
一般来说,使用stash
来设计它的目的: stash
脏工作索引以跳转到另一个分支,修复错误,提交,推送并跳回原始状态。 如果你试图用它来管理很多分支机构的很多变化,它将不可避免地咬你,而不需要太多的照顾。
上一篇: What Are Some Actions In Git That Are Difficult/Impossible to Undo?
下一篇: How to pull a single file from a server repository in Git?