I feel bad for this kid. That really is a bad warning dialog. Nowhere does it say it’s going to delete files. Anyone who thinks that’s good design needs a break.
Half the replies are basically “This should be obvious if your past five years of life experience is similar to mine, and if it isn’t then get fucked.” Just adding insult to injury.
It’s so fucking infuriating that so many devs act like this. “This should’ve been obvious!” Fuck off, that’s an unhelpful statement. “You should’ve been using version control! No backup, no sympathy!” Fuck off, they were literally trying to begin using version control for backups.
Even half the comments on this very Lemmy thread are disparaging this dev. I wonder how many actually read the thread and found that there was a bug discovered causing this feature to delete files not even associated with git?
But, congratulations to them, I suppose. Congratulations on making fun of someone. I hope it makes them feel powerful. 🙄 Devs can be so toxic.
Came here to say this. No one deserves this, not even new programmers who try to learn things.
Some programming tools are really powerful compared to what new users are used to. If you come from the world of Microsoft Office and Apple whatever it’s called, everything is saved automatically to cloud and there is some local backup file somewhere which you can just restore. Modern programs are designed to protect users against their own mistakes, and when suddenly that is taken away, it can be a jarring experience.
I’m not great at English, but “discard all changes” shouldn’t ever mean “Delete”.
In the context of version control it does. Discarding a change that creates a file means deleting the file.
“Discard” is not a git operation.
If you have set up your staging area for a commit you may want to discard (unstage) changes from the staging area, as opposed to discarding changes in the working directory.
Of course, the difference between the two is obvious if you’re using git CLI, but I can easily see someone using a GUI (and that maybe isn’t too familiar with git) misunderstanding “discard” as “unstage”.
Either way, what happened here indicates that all the files were somehow added to the VC, without having been committed first, or something like that, because git will not let you discard a file that is untracked, because that wouldn’t make any sense. The fact that the GUI let this person delete a bunch of files without first committing them to the index is what makes this a terrible design choice, and also what makes the use of the word “discard” misleading.
Ok fair enough, but I’m under the impression these files existed before the source control was implemented.
I guess it’s all up to how the program handles existing files.
I guess the newly created git repository was empty, and all the files that was present in the folder represented “changes”
the alternative to deleting is emptying the file contents, which is essentially the same…
I’m pretty sure vscode shows a confirmation dialog when discarding changes will permanently delete a file. I’ve done that recently with temporary files that were no longer needed.
I remember following the drama back in the day. That warning you saw was the result of this now-classic bug report.
Did you even read the thread?
Also, why not send them to the recycle bin? I never really thought about it before, but that does seem a reasonable UX improvement for this case
I wonder if there’s already a git extension to automatically stash the working tree on every clean/reset/checkout operation…
Because “the underlying Git nukes them right away, so why shouldn’t we perma-delete the files, too?”
Anything else’d be effort…
Honestly it probably just runs the underlying git command
Sorta, but sorta no.
It was actually addressed in https://github.com/microsoft/vscode/issues/32459 – the GUI implied a different git command than what actually got executed!
If you’re going to use a git tool, you need to know how git works.
There are 0 excuses for not having months of work in a repo, none. I have no sympathy whatsoever. How the fuck do you spend so many months without backing up your project or stuffing it in a repo?
No sympathy. Dude is a shit developer and he learned an invaluable lesson.
If you’re going to use a git tool, you need to know how git works.
I guarantee you at least half of git users would get glossy eyes as soon as you mention blobs and trees, yet they all still manage to use it daily successfully.
There are 0 excuses for not having months of work in a repo, none. I have no sympathy whatsoever. How the fuck do you spend so many months without backing up your project or stuffing it in a repo?
I need you to listen to me very carefully: THEY WERE FUCKING SETTING UP A REPO WHEN THIS HAPPENED.
No, by his own admission, he was playing around with the IDE. He wasn’t interested in the version control, he was interested in the pretty editor.
I suggest you go read the original issue.
My guess is that this is a teenager, and this is probably their first experience with git and version control in general. Just a hunch.
Anyway, it is reasonable to expect a mainstream GUI app from one of the largest companies in the world to be approachable for people who do not know all the inner workings of the command line tools that are used behind the scenes. And it is reasonable to expect any destructive action to have clear and bold warnings. “Changes will be discarded” is not clear. What changes? From the user’s perspective, the only changes were regarding version control, so “discarding” that should leave them where they started — with their files intact but not in version control.
Have mercy on the poor noobs. We were all there once.
deleted a chunk of my work the other day by pressing Ctrl z in windows explorer. my project was without source control installed (cuz it was in Dev stage), and Ctrl shit z/Ctrl y hotkeys didn’t work, so that chunk was just gone, persished forever… or so I though. I remembered vs code having a file history under some panel. found it, and here it was - at least some of the latest history of my file. lesson learned: even in Dev where nothing is yet working, finish your day of coding with a commit to a remote repo.
deleted by creator
Makes no sense to me. I’ve never had a single problem. Best ide I’ve ever used.
You can avoid this problem by not doing version control in your code editor. Different programs for different purposes. VS Code is fine for editing code and should not be used to manage an entire project.
(VS)Code(ium) is great. (VSCode is MS fork of the OSS Codium.) It’s a popular editor with a lot of plugin for just about every language. It has an integrated console. It can do basic Version control (and you can use the console for anything more). It’s my favorite editor/IDE (not technically and IDE, at least out of the box). Just don’t do things you don’t understand. It’s that simple. The OP fucked around, and they found out what it does the hard way. It’s really easy to use if you have a basic understanding of things though.
/((vs)|(visual ?studio)):? ?(cod(e|ium)?)/igm
I begrudgingly switched to vscode a few years ago. I’ve never had any issues like this with it. My only issues have been with a plugin that I installed optionally (and that was later fixed by the plugin author).
Viscose is absolutely fine.
Most of these comments can be reduced to either
-
I use CLI by the way…
-
Hating on vscode because it’s Microsoft product and for no other reason.
A Gitlab/GitHub account is free. Vscode absolutely lets you type git commands if you prefer that, The GUI only provides access to the most common actions you will do. And I could be wrong on this, but I feel like the discard button does prompt the user that the files will be permanently deleted and you have to click okay. But maybe that only applies to tracked files, not sure off the top of my head.
-
Every new project for me starts with setting up git. There’s no reason not to. It takes seconds.
Nah you gotta submit a bug report for that
Yeah, standard practice is to set up source control before doing any work at all. Then you add whatever project template/scaffolding files to an initial commit and make it, and keep committing from there.
You should always be committing early and often. Saves you a lot of headache and make it a lot easier to clean up your history later too.
In reality, VSCode has local file history called “Timeline”. It’s enabled by default.
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_66.md#local-history
In reality, that was added four and a half years after this issue was opened.
Oh, didn’t notice this was a 7 year old issue.
Understandable; no time to check details when your fuse is that short
Take my upvote. Seems like he wasn’t the only one in this thread with a short fuse 😁
I meant it in a completely light-hearted way, but I do wonder if some of the downvoters don’t realize I’m talking about the username.
Typical web developer. He didn’t even know files can be deleted without going into „recycle bin”
Why are we dissing web developers? What is this bullshit elitism?
Look at him. He’s just learned that files can be deleted without going info the recycle bin, and he already wants to be treated as equal. Ha!
I think it’s a joke about how noobs only learn javascript and make blazing fast webapps while knowing nothing about computers.
The reactions here are why people don’t join forums, don’t ask questions, or choose to learn alone. “duh, I knew that”. Yes, the dude didn’t, which is exactly why he’s frustrated. I think too many have forgotten what it’s like to be a beginner and make a fatal mistake, which would explain the mocking responses here and things like recommending new linux users Arch.
There is a difference between someone who is new and experiences something like their IDE deletes a file that was unexpected and asking a question about why it did that.
Then there are arrogant assholes who believe their shit doesn’t stink and that they couldn’t have done anything wrong and it was the IDE’s fault for not knowing what they wanted to do versus what they commanded it to do.
The OP is the latter.
I mean, not entirely, and he says he lost months worth of work. Like imagine you know nothing of git:
-
Click buttons in the IDE to add source control.
-
IDE says a bunch of files have been changed.
-
But I don’t want to make changes to the files, I want to source control them.
-
Attempt to undo the changes. Click “discard changes” thinking it will put them back to how they were before clicking add source control. Get a warning dialog that this is not undoable, but that’s fine because I don’t want whatever changes it made to my files anyway.
-
All files are deleted and unrecoverable.
Like that experience sucks balls and it’s reasonable that a person wouldn’t expect “discard” == “delete”. Also, from reading the GitHub thread, apparently at that time VSCode was doing a
git clean
when you clicked this. Which like…yeah why the hell would it do that lol? I don’t think I have ever usedgit clean
in my entire career.Months worth of work. Going an entire day without committing should never happen. Also, rawdogging it without a backup?
Nope, dude learned a hard lesson. No sympathy. He thought that the rules of data storage don’t apply to him and he got boned.
He did learn a hard lesson, but it sounds like this was exactly what he was attempting to rectify. “This project is pretty important to me. I should probably figure out how to use source control and put it on GitHub” but then by doing so, and due to some arguably poor UX decisions in VSC, destroyed the project.
If someone’s trying to learn how to do something you can’t just be like “well you should’ve already known how”, you know what I mean?
Well actually, let’s qualify that: there are cases where people try to jump right in the deep end. “I’m just learning woodworking! Step 1: build a new deck for my house”, like yeah bro what are you doing, let’s start with a birdfeeder or something.
But that’s not what happened here. He tried to use the built-in GUI, which many would assume would be easier to learn than jumping right to the CLI, and it burned him in a way he didn’t even realize was possible.
-
He’s right, his shit doesn’t stink. His decision making was reasonable for a new programmer.
I understand the impulse to be empathetic and kind. But it’s very hard to respond in good faith to someone who just made a post where more than half the words are “fuck you”.
A feature that permanently deletes 5000 files with one click without warning deserves a fuck you.
It had a reasonably clear warning, though; a screenshot is included in this response from the devs. But note that the response also links to another issue where some bikeshedding on the warning occurred and the warning was ultimately improved.
OK this is hilarious
When you sell hammers you’ll likely have people using them to hit their own heads, which, understandably, they will put the hammer at fault. Now, we already put a big don’t hit this on your own head label on our hammer. Should we actually prohibit people from head hitting with our hammers? Probably not, since some users still want to hit heads with it. It’s just how hammers work.
I disagree that that warning is reasonably clear. Even the comment that included it has the line of thought, where the user, not knowing what terms git uses thinks that they just did an action that is going to change each of their files. It makes sense that they’d want to discard those changes. That user then goes on with some snark about not wanting to learn any more about what they are playing with and that other programs would do the same, but “discard changes” seems like it would have a clear meaning to someone who doesn’t know git.
The warning says it isn’t undoable but also doesn’t clarify that the files themselves are the changes. Should probably have a special case for if someone hits discard changes on a brand new repository with no files ever checked in and hits discard on a large number of files instead of checking them in. Even a “(This deletes all of the local files!)” would make it clear enough to say what the warning is really about.
My git gui has a tick box on that prompt to specifically include added files. I now see why haha
Well, yeah, that’s why the linked ticket led to a massive improvement:
That’s way better. His sacrifice benefited others in the end.
(I haven’t checked what the warning says today.)
Even if you know git, you wouldn’t assume that “discard all changes” affects untracked files. It’s bad design all around
That depends on what you map “discard” to in your mental model. Whoever designed the VSCode feature chose to associate it with reset+clean, rather than just reset. Presumably that’s why they called the menu option “discard” rather than “reset”. (But I agree that this is a surprising choice, and that they managed to make an already-famously-bad UX even worse.)
If you have no idea what Git is, that warning message is not telling you you’re about to delete 5000 files.
But I wonder if this person maybe does know about Git because they used the word „stage“.
If you don’t know what git is, you should probably avoid choosing the “confirm” option when you’re warned that an operation is dangerous.
That said, I think the change they ultimately made in the linked issue, which words the warning differently and, more importantly, provides an option to only discard changes to already-tracked files, is a vast improvement.
“Discard changes” is usually equivalent to “cancel” or “quit without saving”. Not shift+delete files lol.
Well, yeah, that’s why they updated the warning pop-up. It’s still the case that the user didn’t bother to find out what the warning meant before choosing the inherently destructive option.
Here’s the revised pop-up, according to the linked ticket:
I haven’t checked the current behavior (this whole incident was seven years ago).
No backup, no sympathy.
Doing a
git clean
is a dick move.Yeah, real developers do
git clean -dxf
.The user clicked an option to “discard” all changes. They then got a very clear pop-up saying that this is destructive and cannot be undone (there’s a screenshot in the thread).
I very much understand how one can think this would revert any changes done to files under version control but not delete the ones that are not. I believe this dialog has since been updated to explicitly state that fact.
Yes, the dialog was changed, as part of this linked issue (and maybe again after that; this whole incident is very old). After reading some of the comments on that issue, I agree with the reasoning with some of the commenters that it would be less surprising for that menu option to behave like
git reset --hard
and not delete tracked files.
5000 files
0 backups
Someone’s got their priorities mixed up.
And they were trying to correct their priorities by looking into the source control features, so I don’t see how that’s anything other than victim blaming for them not doing it sooner.
I would argue that it’s common sense to at least make a point in time copy, to… IDK, a USB drive? Before trying to implement a new source/control system.
Just plug in an external drive, or a thumb drive, copy/paste, unplug it, then proceed with testing.
I don’t see how anyone who values their time and effort could do any less.
As for the files, undelete is a thing, and it shouldn’t be hard to do.
having 5000 backups of 0 files is also kinda pointless.
Yeah, those are novice numbers. I have infinite backups of my 0 files!
You have to lose it all to know what matters (speaking from experience 😭)
I once lost three hours of work early on during my learning, not much that I lost but it was a moment when I learnt a lesson. Never lost work after that ever.
I always found Git GUIs, especially the ones built into IDEs, to be more confusing and clunkier than working with Git on a terminal. It often feels like unlearning what one knows about Git, and relearning it the way that specific GUI demands.
Heck, I am going through the aforementioned feeling as I force myself to use Magit on Emacs. It just does not feel intuitive. But I will not give up until I have made an honest and full attempt.
The only sensible Git GUI I ever used is Sublime Merge[0], after a coworker praised it immensely. Even that is reserved for the rarest of the rare times when the changes in the workspace gets unwieldy and unruly. For every other instance: Git CLI on a terminal.
[0] https://www.sublimemerge.com/
E: typo, and link to mentioned GUI.
JetBrains has really nice Git integration. Interactive rebaseses and merges are quite pleasant but I’m still dipping into the command line to do stuff occasionally. Most commonly a
git reset HEAD~
cause I want to split a commit though I had to dig through the reflog the other day cause I suddenly realized I lost an important branch that ended up being over a hundred commits back.How do you view diffs and merges when you say you don’t use git GUIs? External tool or terminal/command line?
I use Jetbrains IDEs and most of my life has been IDE based git interaction. And I honestly love it, easy access to see my diffs, the most common commit, push and stage(or shelve as Jetbrains does it, which is better than visual studio). Hassle free and available beats writing anything to me.
How do you view diffs and merges when you say you don’t use git GUIs? External tool or terminal/command line?
Terminal.
I use Jetbrains IDEs and most of my life has been IDE based git interaction. And I honestly love it, easy access to see my diffs, the most common commit, push and stage(or shelve as Jetbrains does it, which is better than visual studio). Hassle free and available beats writing anything to me.
Perhaps, it is a mix of learned behaviour and cognitive fixation, as I started out my development journey predominantly using a terminal, that I cannot fathom Git GUI being hassle free.
Nice to read a different perspective on such a fundamental thing that I take for granted while working. Thank you for sharing it.
please fix uwu
Same account that complained about the christmas santa hat
Say you don’t know how to use git without saying you don’t know how to use git.
That’s what happens when people stumble across that website called GitHub, get hooked and now have unrealistic expectations for the real git.
“I just installed Git for Windows. Where is the drag-to-upload box?”
— A statement dreamt up by the utterly deranged
Real git involves a lot of sweat, requires you to clean up any mess you make, and communicate with any partners about their preferred techniques instead of rawdogging it and waiting for issues. The pushing and pulling will come naturally but you need to know how and when to release, and be clear about how you wish to commit. Nightly is an option but good luck getting everyone on board. People might judge you for using the word “master” but it should be alright in private.
involves a lot of sweat, requires you to clean up any mess you make, and communicate with any partners about their preferred techniques instead of rawdogging it and waiting for issues. The pushing and pulling will come naturally but you need to know how and when to release, and be clear about how you wish to commit. People might judge you for using the word “master” but it should be alright in private.
Don’t talk about my mom that way
I’m literally a software dev working for a top company and I can barely use git on the CLI. I do all of my version control operations using a GUI, so there’s no sense in gatekeeping any of that. This is true of both my work projects and personal ones. It’s cool if you prefer the CLI, but it is absolutely not a required skill in order to have a successful and meaningful career.
I agree that the gatekeeping isn’t a good thing, but you should learn at least the basics of the CLI. It will give you a better understanding of what’s going on behind your GUI and makes troubleshooting and fixing problems a lot easier.
Definitely not required but it is absolutely a skill worth having.
It’s absolutely not a skill worth having. If you ever run into issues and need the CLI, you can always get your knowledge right in that moment. If you already can do everything with your GUI and get the same results, getting the knowledge to do it some other way is just wasted time and duplicate work.
It’s not even about the CLI. it’s about hygiene
People might judge you for using the word “master” but it should be alright in private.
I snorted. It was my inner 12-year-old’s fault. (Also because of recently some idiots getting up in arms about these terms in technology.)
“up in arms”:
Reality:
– “just don’t use them, some people find them offensive”
– “ok”Anonymous techbros online:
“yOu CanT sAY aNYtHiNg ThEsE daYs”
Git doesn’t automatically recursively add all files in the directory to the repository though - VSCode decided that should be the default behavior, while other editors (intellij) ask if you want to add newly created files to version control
That’s how git works. Every file and subfolder under the repo’s root folder belongs to the repo.
What does
git add xxx
do then
I just hate the vscode source control. It has always felt clunky and like it breaks things (or i just never figured out the workflow - either way i dont need it lol) It is way clearer to see what is happening the console
Alright you convinced me its time to pick up this skill. How does one best learn git? Just play around with it and break things?
read the official book : https://git-scm.com/book/en/v2
That’s basically how I did it.
To properly learn it using this method, create a directory that contains only text files and sub directories and treat it like a real project. Add files, delete them, play around with updating the repository. Try and go back a few updates and see how the things react. Since it’s not a real project there’s no risk of loss, but you’ll still get to see the effects of what you do.
that’s a necessary step in your learning process, but certainly not sufficient. I’d recommend reading the book, since it shows in greut detail the inner workings of Git along with the basic concepts :
I agree with the “learn the CLI”, but to newcomers I’ll also suggest to look at the IDE/editor’s output channel - if there’s GUI for Git, there are also most likely logs for what’s happening under the hood - even if a little noisy, it can be a good learning resource. And of course if you’re learning and unsure of what’s happening (with the CLI or through a GUI), do so in a non-destructive manner (by having proper backups).
If the files were already staged then git should have blobs in the git folder, so they should be recoverable.
Did you read the thread? There was a bug that deleted all files even ones unassociated with git.
Sounds like they weren’t even using version control, and had no business anywhere near a project that size.
had no business anywhere near a project that size.
Lol. That’s a really good point, actually.
I add version control around file number 3200…
(I’m kidding. Writing even a couple lines without version control makes my eye twitch.)
Even back in my super noob days, I’d keep known good working versions of the files in separate folders. I basically invented my own terrible source control system before I knew anything about svn or git.
Yeah. Same here. We learned to mistrust computers very early.
Looks like they weren’t staged. He clicked on the staging option, it showed it would stage thousands of files, he said “hey I should fix my .gitignore” and clicked on what looked like either a “don’t stage” or a “forget” button, and it was a “checkout --force” button.
The most impressive thing is all the people doubling down on the idea that a “checkout --force” button in a main interaction screen is a great idea, there’s nothing wrong with the software, and the user is a moron.
“discard changes” button - the 5000 “new file created” changes, specifically.
Looks like windows should come with a dictionary.
“Huh, discard, I wonder what that does. Let’s try it on all my work from the last six months”
Idiots gonna idiot…
This feels like when my brother backed up a file with Onedrive, then figured he could delete the original… the one that Onedrive was keeping track of.
It’s not that these aren’t confusing, but why risk your file without testing what the software will do first? Especially before hitting anything like “delete” or “discard”?
See, that’s a mistake I could see myself making. I would just assume that OneDrive was making a backup, not tracking the file.
Problem is, there’s an entire generation of users that have gotten super used to “discard changes” as a means of signalling “on second thought, don’t do anything”.
That’s definitely how it is seen.
If I were to see “Discard Changes” anywhere in a dialogue, I would assume it will discard whatever changes I made in that dialogue. In this case, probably some source control related changes. If it were to say “Warning: This will Discard ALL changes!!!”, I might do a double take, but had I never usedgit
CLI before, I would still assume that at most it would discard “ALL” changes made in the current session.For me personally, I would consider it more useful for it to say:
This action will delete the following files: - followed - by - a - list - of - files - that - would - be - deleted Continue?
Which neither has to look like a warning, acting like you might be doing something you don’t want to and also is much more useful for someone like me who wants to double check what exactly I am deleting.
Also, I have used
git
CLI before and apart from being able to seeblame
in the editor itself and maybe a better representation oftree
, I don’t feel the need to use anygit
GUI tool. Even when I tried, I realised it was slower and more finicky to use. So, it would stand to reason that it should be targetted towards people who don’t use CLI (and might have never usedgit
CLI).From a certain point of view - isn’t this exactly what happened here?
I often go into a Git worktree of one of my projects and mess around a bit to try something out. If I find it’s not working, I tell git to discard the changes with
git checkout .
andgit clean -df
. What I’m saying is exactly “on second thought, don’t do anything" - while what happens in practice is that Git restores all files to theirHEAD
status and removes all the new files that are not already inHEAD
.Of course, the difference is that I already have all the work I want to keep under source control, so these changes I’ve discarded really were that - just changes. He, on the other hand, “was just playing with the source control option” - so these “changes” he was discarding really were all his work. But Git did not know that.