什么是Git的一些难以/不可能撤消的行动?

时间:2013-05-01 19:24:07

标签: git

Git的优点之一是,因为它使用指针操作,所以撤消包括deleting a commit or commitscreating and deleting remote branches在内的各种任务相对容易。在许多情况下,您真正​​需要做的就是将当前分支的HEAD指针正确地重置为所需的位置,然后撤消。这涵盖了相当多的案例。

除了删除整个存储库或错误推送之外,在标准Git存储库中,无法撤消或极难撤消的最重要的操作是什么?

4 个答案:

答案 0 :(得分:4)

到目前为止,我在git新手中遇到的最常见的“难以撤消”错误是git stash的滥用,因为git stash popgit 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来实现它的目的:存储脏工作索引以跳转到另一个分支,修复错误,提交,推送和跳回到原始状态。如果您尝试使用它来管理许多分支机构的许多变更,那么它将不可避免地给您带来麻烦。

答案 1 :(得分:3)

  • git clean删除未跟踪的文件。它们无法用git恢复。

  • 与脏工作树合并可能会导致难以恢复的内容。

简而言之,git无法恢复git无法跟踪的内容。其他一切都是可以恢复的。

答案 2 :(得分:3)

难以撤消行动的一个例子是:

git branch -D some-unmerged-branch-such-as-master
git gc --prune=now --aggressive

第一个删除对某些提交的引用。第二个删除所有提交而没有引用。

我希望这个问题只是空闲的好奇心,而不是你想要废弃某人的回购,但由于分布式版本控制中固有的冗余,我不会太担心。

答案 3 :(得分:0)

根据我的经验,人们最常见的不可逆行为是git reset --hard。当很多人写git reset时,--hard似乎太自然了,因为他们真的只需reset,也许--keep