我知道git reset --hard
可能会导致不必要的数据丢失,因为它可能会做出无法撤消的更改,是否有办法在执行之前检查它会做什么?
git reset --hard --dry-run
或
git reset --hard --verbose --dry-run
不幸的是,它不能与现有的Git一起工作,因为reset
不支持--dry-run
。
我知道git reset --hard
可能会导致不必要的数据丢失,因为它可能会做出无法撤消的更改,是否有办法在执行之前检查它会做什么?
git reset --hard --dry-run
或
git reset --hard --verbose --dry-run
不幸的是,它不能与现有的Git一起工作,因为reset
不支持--dry-run
。
4条答案
按热度按时间57hvy0tb1#
既然你似乎正在寻找一个选项,你可以避免数据丢失,让我给你一个不同的选择.
git stash
允许您在将HEAD
保存到stash
时检出HEAD
。然后,您可以使用git stash pop
撤消此操作。所以,你可以不使用
git reset --hard
,而使用git stash
,结果基本相同。如果你不喜欢这些修改,你可以使用git stash pop
撤销它,如果你觉得不错,你可以使用git stash drop
从存储中删除这些修改(这是一个破坏性的操作)。如果您还想包含未跟踪的文件(默认情况下
git reset --hard
不这样做),可以使用git stash --include-untracked
。如果不想重置为
HEAD
(也就是说,你想执行git reset --hard some_ref
),你可以先执行stash
本地修改,使用git show-ref
获取当前提交哈希,然后运行git reset --hard
。如果你不确定,你可以重新设置为提交(除非你运行git gc
或类似的东西来清除悬空引用)。然而,在这一点上,你可能也想创建一个分支或标记作为备份。无论如何,我建议您创建一个包含所有重要更改的存储库副本(只需复制整个目录),以防出现问题,特别是如果您不确定命令。
还要注意,
git stash
允许您隐藏本地更改, checkout 或重置另一个引用,然后将这些更改应用到新 checkout /重置的引用上。vs3odd8k2#
我不同意这个问题的前提。我整天都在灵活自由地进行硬重置,我不会冒任何风险。如果所有的东西都在提交中很好地隐藏起来,硬重置是完全安全和不可撤销的(特别是如果你先做了一个占位符分支)。所以这只是一个确保所有东西都被隐藏起来的问题。
git status
会告诉你这一点。另外,考虑
git switch --det
作为一种替代方案。它的功能与硬重置非常相似,但它内置了安全检查。您总是可以先切换,然后再移动分支名称。同样,我经常这样做。最后,我只需要补充一点,我有一个别名,它允许我说
git snapshot
,以确保双重肯定:如果你先快照,下一步就安全了,因为你总是可以回到你之前的提交并应用隐藏的内容。
ibrsph3r3#
git reset --hard
没有空运行模式,但这应该会让您接近相同的信息:或作为单内衬:
qyswt5oh4#
为了看看
git reset --hard
有什么影响,你可以创建一个分支的备份,如果你不满意的话,可以恢复到它:如果您对此不满意,请恢复备份:
否则,删除备份