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脏工作索引以跳转到另一个分支,修复错误,提交,推送并跳回原始状态。 如果你试图用它来管理很多分支机构的很多变化,它将不可避免地咬你,而不需要太多的照顾。

    链接地址: http://www.djcxy.com/p/37809.html

    上一篇: What Are Some Actions In Git That Are Difficult/Impossible to Undo?

    下一篇: How to pull a single file from a server repository in Git?