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


What Are Some Actions In Git That Are Difficult/Impossible to Undo?

Git的一个优点是,因为它使用指针操作,所以撤消包括删除提交或提交或创建和删除远程分支在内的大量任务相对容易。在许多情况下,您真正需要做的就是正确地将当前分支的头部指针重置到所需的位置,然后voila,step undone。这包含了相当广泛的案例。

除了删除整个存储库或错误的推送之外,在标准的Git存储库中,什么是最不重要的操作,既不能撤消,也非常难以撤消?


用最常见的"远东第一误差很难撤消"吃到那些新的跨越,在Git git stash)是推,是因为git stash popgit stash总是可逆的。考虑:

1
2
3
4
5
6
7
8
9
10
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)再次流行。这是一个fairly平凡的例子,但它很容易得到。如果你stashing点集经常变化大,常发性和开关的分支,一路上。我相信git stash drop也即是永久性的,没有安全网,如果你删除的错误隐藏。

在一般情况下,它被设计stash所使用到的隐藏的肮脏的工作:在对跳到另一个分指数,修正bug的提交,推,跳到你的背,和原来的状态。如果你试图使用它来管理的变化在许多分支很多,它会咬你inevitably护理没有伟大的交易。


在一个例子很难撤消的行动将是:

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

第一removes参考一些承诺。第二deletes没有引用的所有邮件。

我希望这只是一个闲置的好奇心是一物,而不是你想要的人对垃圾的回收,但由于其固有的冗余在分布式版本控制,我不太worried。


  • git cleandeletes untracked文件。他们会恢复使用Git。

  • 合并与肮脏的工作,结果在一个树的CAN的东西是很难恢复的。

操作系统中的短,通过跟踪的事情是不是会恢复通过GIT GIT。其他的事情是可恢复的。


在我的经验,这是最常见的不可逆的行动是git reset --hard人表演。当许多人写--hard似乎吃太git reset,当他们真的只需要在自然与--keepreset,也许。。。。。。。