Git中都有哪些难以/不可能撤消的操作? [关闭]
Posted
技术标签:
【中文标题】Git中都有哪些难以/不可能撤消的操作? [关闭]【英文标题】:What Are Some Actions In Git That Are Difficult/Impossible to Undo? [closed]Git中有哪些难以/不可能撤消的操作? [关闭] 【发布时间】:2013-04-25 20:25:15 【问题描述】:Git 的优势之一是,因为它使用指针操作,所以相对容易撤消包括deleting a commit or commits 或creating and deleting remote branches 在内的大量任务。在许多情况下,您真正需要做的就是正确地将当前分支的 HEAD 指针重置到所需位置,然后瞧,撤消步骤。这涵盖了相当广泛的案例。
除了删除整个存储库或错误推送之外,在标准 Git 存储库中无法撤消或极难撤消的最重要的操作是什么?
【问题讨论】:
我不明白这个问题的意义。 我确实理解这个问题和类似问题的意义。本质上,它是在问,“龙在哪里?”这个问题远非“没有建设性”,但它更适合 Programmers Stack Exchange。在开始使用新技术时,开发人员通常想知道龙、陷阱和诱杀装置在哪里。 【参考方案1】:根据我的经验,人们执行的最常见的不可逆操作是git reset --hard
。当很多人写git reset
时,--hard
似乎来得太自然了,而他们真的只需要reset
,也许还有--keep
。
【讨论】:
【参考方案2】:到目前为止,我在 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
将尝试自动合并 A
并引发冲突,但您不能通过再次点击 git stash
来退出流行。这是一个相当微不足道的例子,但是如果你经常存储大量的更改,并且经常切换不同的分支,那么很容易进入一个令人讨厌的地方。我相信git stash drop
也是永久性的,也就是说,如果你丢错了藏匿处,就没有安全网。
一般来说,使用stash
来完成它的设计目的:存储脏工作索引以跳到另一个分支,修复错误,提交,推送,然后跳回原始状态。如果您尝试使用它来管理跨多个分支的大量更改,那么它不可避免地会在您不加注意的情况下咬住您。
【讨论】:
这是一个旧条目,但在这种情况下,您可以简单地reset --hard
。 stash pop
不会自动删除存储条目以防万一。【参考方案3】:
一个难以撤销的动作的例子是:
git branch -D some-unmerged-branch-such-as-master
git gc --prune=now --aggressive
第一个删除对某些提交的引用。第二个删除所有没有引用的提交。
我希望这个问题只是出于好奇,而不是你想破坏某人的回购,但由于分布式版本控制固有的冗余,我不太担心。
【讨论】:
这个选项组合是否也会对reflog
引用的对象进行核攻击?
这绝对比恶意更接近于闲散的好奇心。我对 Git 的源代码控制能力可能存在的限制更感兴趣。【参考方案4】:
git clean
删除未跟踪的文件。它们无法用 git 恢复。
与肮脏的工作树合并可能会导致难以恢复的东西。
所以简而言之,git 不跟踪的东西不能被 git 恢复。其他一切都可以恢复。
【讨论】:
其实并不是所有被git跟踪的东西都可以恢复。删除分支似乎是永久性的。甚至还有一些不明显的方式可以发生分支删除,例如git push --mirror REMOTE
;当您的本地没有远程分支时,远程分支将以非交互方式删除。 (Cf. the excerpt from git help pages: "--mirror [...] 新创建的本地 refs 将被推送到远端,本地更新的 refs 将在远端强制更新,删除的 refs 将被移除 从远端")以上是关于Git中都有哪些难以/不可能撤消的操作? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章