Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx> writes: >> We have these "powerful" tools for a reason. After making a mess >> experimenting with your working tree files, "reset --hard" is the >> best tool to go back to the known-good state, > > I disagree with that. This reminds me a discussion I had with a student > a few years ago: > > student: how do a clear all changes from my worktree? > me: git reset --hard > > the next day: > > student: OK, now, how do I get my changes back? > me: ...! > > There's almost no situation where reset --hard is the best tool. I obviously have to disagree. After maknig a mess experimenting, when you want to discard all that, "reset --hard" is the best tool--the situation of your student may be quite different but you didn't make it clear what s/he wanted to salvage. In any case, I wasn't asking about "clear all changes for now, to be salvaged later". The "experimenting" would include mergy operations like "am -3" and "cherry-pick". "After queuing a topic and trying it in isolation, an attempt to merge to the baseline results in quite a mess, and I give up"--there is nothing to salvage. And obviously, "stash" is not useful in such a situation. You could use "tar cf ../saved .", though. > Now, another issue with the proposed core.isbeginner is compatibility > with scripts. Yes. > Dangerous commands are often plumbing, and a beginner may > still want to use scripts or other porcelain on top of it. Typically, I > think this rules out "git reset --hard" which is legitimate in scripts. I agree that an "under core.isbeginner, the command will always be refused" change can be written without thinking and it will be useless for anything that has ledigimate uses (like, but not limited to, being used in scripts) [*1*]. But not so fast. If you can figure out when "git reset --hard" is legitimate based *NOT* only on the fact that it is driven by a script, but on what kind of modifications to the working tree contents, the index contents and the refs are about to be made by the command, then "core.isbeginner" can be a permission for the command to spend extra cycles to examine the situation carefully to decide to selectively go ahead, warn and go ahead, or refuse. That of course takes a real thinking. [Footnote] *1* I'd refuse to take a patch to make scripted Porcelains that make legit calls to "powerful" tools export GIT_SCRIPT_IS_RUNNING_YOU environment variable as a workaround for such a kludge. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html