Git的优点之一是,因为它使用指针操作,所以撤消包括deleting a commit or commits或creating and deleting remote branches在内的各种任务相对容易。在许多情况下,您真正需要做的就是将当前分支的HEAD指针正确地重置为所需的位置,然后撤消。这涵盖了相当多的案例。
除了删除整个存储库或错误推送之外,在标准Git存储库中,无法撤消或极难撤消的最重要的操作是什么?
答案 0 :(得分:4)
到目前为止,我在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
来实现它的目的:存储脏工作索引以跳转到另一个分支,修复错误,提交,推送和跳回到原始状态。如果您尝试使用它来管理许多分支机构的许多变更,那么它将不可避免地给您带来麻烦。
答案 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
。