The real issue is already going 3 months without source control.
I have heard things from another apprentice who just does not use version control at all and the only copies are on his laptop and on his desktop. He is also using node.js with only 1 class and doesn't know about OOP (not sure if you even use that in js no clue š ) and has one big file with 20k lines of code I have absolutely no clue how he navigates through it
I know the type. Usually the kind of confident know-it-all who refuses to learn anything but delivers changes really quickly so management loves them. I had the misfortune to fix such a project after that 'rock-star' programmer left the company. Unfortunately the lack of professional standards in our industry allows people like that to continuously fail upwards. When I left the project they rehired them and let them design the v2 of the project we just fixed.
My company for the longest time had two engineers they would give all the new projects to. They would rush through some prototype code as fast as they could then management would bring in a new team to take the project over. The code was always garbage and crammed into one place. I kept getting new projects and instead of starting from a nice clean slate we always had to build on that garbage. It sucked so bad.
When I left the project they rehired them and let them design the v2 of the project we just fixed.
Lol. Wow.
And that is why I've been unable to work myself out of a job in all my long years as a developer.
Jesus, reminds me of a similar story. My gf once lost a job to someone who literally just pasted code into LLMs, also delivering quickly, even tho it was hot garbage. Anyhow, she spent a lot of her time fixing his shit and so her output went down. I hope that company burns to the ground with completely un manageable software.
Reading this just give me a panic attack
Those are rookie numbers. I have at least a 35k one somewhere. More than one actually.
People run their businesses on this.
He just heard monoliths were in again
Ey! Reminds me of my middle-school years! I still can't belive I made an entire game without a single class... Just storing info in arrays and writing in comments what location represents what data. But I was a literal child, too young to read guides or sit through "long" tutorials.
I don't want to sound too mean, but whenever I see anything similar at work, I wish that person get a job they're actually good at. It's fine and all that the company started hiring actual programmers to fix things, but the fact that the old crew still fucks shit up with senior privileges is a major grievance.
The person didnāt have any git repository; probably a new programmer that didnāt know how version control works and just clicked discard without understanding what that means in this situation
In case anyone else is wondering, or simply doesn't like reading screen shots of text, this is apparently a real report:
2.Commit the deadly sin of touching the source control options.
š¤£
Ignore the scary warning VS Code shows you when you press the button.
I dunno, ādiscard changesā is usually not the same as ādelete all filesā
Nowadays the warning even says that this cannot be undone. Maybe that wasnāt present in 1.15, though.
It was. If you go through the OP thread, one of the responses is a picture of the dialog window that this user clicked through saying, "these changes will be IRREVERSIBLE".
The OP was just playing with a new kind of fire (VSCodes Git/source control panel) that they didn't understand, and they got burned.
We all gotta get burnt at least once, but it normally turns us into better devs in the end. I would bet money that this person uses source control now, as long as they are still coding.
What exactly do you think discard means?
āChangesā are not the same thing as āfilesā.
Iād expect that files that are not in version control would not be touched.
Apparently, it means changes to the directory structure and what files are in them, not changes within the files themselves. It really ought to be more clear about this.
It means both.
Yeah. They did substantially modify the message to make it much clearer, thankfully.
Yeah. That's discussed in more detail in the code change that resulted from the issue report.
It's a ballsy move by the VSCode team to not only include git clean but to keep it after numerous issue reports.
As others discussed in that thread, git clean has no business being offered in a graphical menu where a git novice may find it.
That said, I do think the expanded warning mesage they added addresses the issue by calling out that whatever git may think, the user is about to lose some files.
"Changes" encompass more than you think. Creating / Deleting files are also changes, not just edits to a file.
If the change is an edit to a tracked file, "Discard Changes" will reverse the edit.
If the change is deleting a tracked file, "Discard Changes" will restore it back.
If the change is a new untracked file, "Discard Changes" will remove it as intended.
It can also be all of them at the same time, which is why VSCode uses "Changes" instead of "Files".
And the terminology is misleading, resulting in problems. shrug.
I find it difficult to lay the blame with VSCode when the terminology belongs to git, which (even 7 years ago) was an industry standard technology.
People using tools they don't understand and plowing ahead through scary warnings will always encounter problems.
If the change is a new untracked file
Wasn't the issue that it deleted a bunch of preexisting untracked files? So old untracked files.
If the "changes" are all your files, discarding them for me means basically delete my files, you know, the ones you are trying to add.
At the same time, OP seems a layman, and might be coming from things like Microsoft Word, where "Discard all changes" basically means "revert to last save".
EDIT: After reading the related issues, OP may have also thought that "discard changes" was to uninitialise the repository, as opposed to wiping untracked files.
Having done exactly 0 research, I going to assume it's one of those "DO NOT PRESS OKAY UNLESS YOU ARE EXPERIENCED AND KNOW WHAT YOU ARE DOING" and someone went "pffft I know what I'm doing. click now what does this option do..."
reading through it, it sounds like they opened a project in VSCode, and it saw that there was a local git repo already initialized, with 3 months of changes uncommitted and not staged. So the options there are to stage the changes (git add) to be committed or discard the changes (git checkout -- .). I guess they chose the discard option thinking it was a notification and i guess the filename would be added to gitignore or something? Instead, it discarded the changes, and to the user, it looked like VSCode did rm -rf and not that this was the behavior of git. Since the changes were never committed, even git reflog can't save them.
It appears that the behavior actually included a git clean. Which is insane in my opinion. Not sure if they changed it since, but thereās definitely a dev defending it.
Yeah, it's unclear to me at the time if the dialogue box in the screenshot appeared when doing a select all operation, but it reads as though the OP dev didn't understand git, discarded their work, and got upset that it was an option.
Realistically if the dialogue box appeared, I'm not sure there would be anything else the IDE could do to prevent the dev from themselves. Perhaps reject operations affecting 5000 files? But then you'll just have someone with the same issue for 4000 files.
The issue I linked has a very good analysis of the UX issues and several suggestions for fixing these. They went with a minor iteration on the original message box, which not only includes a clearer message and the number of files affected, but also defaults to not touching untracked files (while preserving the option to delete untracked files as before).
It appears that the behavior actually included a git clean. Which is insane in my opinion.
Yeah. Building a convenient accessible context free way to run git clean...sure feels like the actions of someone who just wants to watch the world burn.
He said they're not going to change it, just make the dialog a lot more clear and add a second button to it that will only do a reset without the clean.
The second button is actually a pretty major change!
Pretty sure the scary warnings in big bold text are more recent than this report.
Nope. The scary warning is even screenshotted and used as an example in the post report discussion.
It's quite the fun read!
4. Complain about lack of a scary warning.
The dude ranted for awhile in the issue thread and closed the issue himself too! lol
This link was included in the post but I realize that "source" was probably not the best label for it. Updated to make it more clear.
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.
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.
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.)
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
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
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?
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 don't know anything about programming, i came here from /all, but it seems to me that a command that's this permanently destructive warrants a second confirmation dialog message reminding the user that the files will be permanently deleted and not undoable
Here is the exact warning that a user had to click through in order to get to where they got:
That's not a very good dialog box. He didn't make any changes, so discarding them doesn't sound like a problem.
There should be a notice when you enable source control that this will permanently delete all existing files with a checkbox (checked by default) that says "Add existing files to source control."
He wouldn't have seen the "Discard Changes" button at all if source control wasn't already setup (and detected by VSCode).
No sane program will delete files when you initialize source control either.
As I found later, VSCode did have weird behaviors with source control back then. My experience is more with the latest versions.
My sibling ran into this issue once. I'm not sure if it's a setting or a default, but vscode would assume they were working in a blank repo until they made a commit.
Sounds like this person had the project (without source control) in another IDE, tried out VSCode, and it assumed that it was all 'changes'. I don't use VSCode, do I can't say for certain, but I know my sibling lost ~4 hours of project set up for the same reason (though they immediately realized it was their fault).
Reading your comment and #32459, I realize that VSCode source control did have some major issues back then.
It looks like they have improved though, as the latest VSCode I use doesn't auto-initialize repositories anymore.
Hm ok yeah, that seems quite scary sounding so that i would strongly hesitate before clicking on "discard ALL changes". Still, I wonder if a second confirmation dialog with more information is warranted for a command that's so destructive.
I wouldn't assume "discard changes" means "delete files that existed before the editor did".
It's changes from the prior commit in the repository, which, if they had not committed anything prior, would have been an empty directory.
This is perhaps a good lesson in teaching version control as its own concept rather than "streamlining it" by bundling it with an editor.
You shouldn't be taking ownership of files and then deleting them without communication a hell of a lot better than that.
I understand what happened. I'm saying that if you're going to delete stuff that was there before the software was, your flow to adding a project should include suggesting a base level commit of everything that's there already.
That's definitely fair, creating a repository in a non-empty directory could definitely suggest auto-committing the current state if it doesn't already. I don't use VSCode so I wouldn't know.
Although now that I think about it, that could have been the intention here but not automatic, if that's why 5k+ files were staged without the user explicitly staging them. Extra tragic if that's the case.
Although now that I think about it, that could have been the intention here but not automatic, if that's why 5k+ files were staged without the user explicitly staging them. Extra tragic if that's the case.
From the git discussions around the issue, it wasn't that the files were automatically staged, but that the "discard all changes" feature invoked a git clean, and also deleted untracked files.
Since OP's project wasn't tracked, it got detonated.
Ok then, the changes to the repository shouldve been discarded. Anything he uploaded shouldve been deleted from the server. Why were files on his local machine deleted?
The repository in Git isn't on the server, it's on your local machine.
What makes you think a server was involved here? It was a local repository, evidenced by the reporter's bewilderment that files can be deleted without going to the Recycle Bin first. Which tells us that in addition to VCS, they were unfamiliar with Windows as well.
Admittedly i dont use source control myself as im a hobbiest, but I didnt realize that git was local. As for the recycle bin bit, yeah theyre kinda dumb. Is source control different from git?
Hobbyist myself so no worries! Git is one example of source control / version control software. You normally have your local working copy of a repository and then a remote where you push your changes when they are finished or to share them with others.
It's not that. It means discard all changes made after the last change committed to this local repository.
Then you donāt understand git or source control in general. If you donāt commit your changes, then you discard any changes, youāre set back to the last commit. Discarding changes also includes any un-committed new files.
Which is exactly the situation the dude was in. As a newbie, it's an easy mistake to make. Telling somebody who doesn't know "well, would you look at that, you didn't know!" is not just unhelpful, it's useless and condescending.
discarding changes does not discard uncommitted new files. The VS Code button did a git clean which is completely unexpected. Git even refers to a git clean with completely different terminology.
git reset -> "Resets the index and working tree. Any changes to tracked files in the working tree since are discarded."
git clean -> "Cleans the working tree by recursively removing files that are not under version control, starting from the current directory.". This command also requires you to specify a force option to actually do something, else it quits with an error.
Note that git clean never once refers to discarding anything, and git reset never refers to removing untracked files. VS Code was doing an idiotic thing. Running git reset --hard AND git clean. There is absolutely no reason to be running git clean from an UI button ever. If you want to remove a file you can explicitly remove it.
Imagine that the button said "Discard all changes" and then it ran rm -rf --no-preserve-root /*. Would that make sense as a button? No. It definitely would not.
I guess cancelling would go back to the "Then you want to commit all files?" dialog, which the user didn't want to, he just wanted to cancel whatever the IDE was trying to start.
The problem is that these are āsource control basicsā that everyone needs to learn the hard way once it seems.
Waiting 3 months in between commits however is a really bad rookie mistake because you were worried about making a commit that wasnāt perfect.
the problem is that VS Code ran git clean if you clicked yes, which is completely idiotic behavior. No other git client, text editor, or IDE on the planet does that.
Either way, waiting 3 months worth of work before a commit is the big mistake here.
I think they hadn't ever used git before, and according to at least one person in the linked issue, vs code might have auto initialized the git repository for the user.
In fairness, ALL git terms feel backwards at first.
Imperfect commits never existed when you squash.
Squash ftw.
Simpler clearer history.
Interesting. I wouldn't know, because I code everything perfectly the first time.
Disclaimer: The above flagrant lie was brought to you by my also using rebase and squash to hide all of my mistakes.
They clicked discard changes, confirmed it, and the computer did as instructed. This operation is normally not so destructive as it only discards uncommitted changes to realign the local directory with the remote server. Unfortunately for user, it sounds like they have never committed a change, so realignment meant reverting to an empty folder.
I think itās important to know that this program is for code developers, and the issue here is with a tool called git. Git is like file saving on steroids, because on top of saving a single file, you save many changes to files in git, add a comment for why you made those changes, and share your changes across dozens of files with other developers.
What this guy did was develop for many months after starting to use git, but he never actually committed the files. Then he asked for to reset everything back to the original state, something that I do multiple times a day, and it gave him a warning that original means original and you will lose everything. And he said do it anyways.
No he asked for a discard after importing the project into VS Code. discard in git terms refers to git reset, not git clean. Even if he wanted to run a git reset then this version of VS Code would have run a git clean and deleted everything. Imagine he committed all 5000 files, but had a secret.json that he hadn't committed. He didn't add it to gitignore either. Running a git reset --hardwill not delete this file, but the VS Code button did exactly that because it ran a git clean.
Perhaps. Still I am not sure why someone who is not aware of this would be using VSC. If they are a student then what kind of project are they working on that they have so many files?
I'm sure 99% of the files were node modules. The npm bloat is real.
That is wild.
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.
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
Because āthe underlying Git nukes them right away, so why shouldnāt we perma-delete the files, too?ā
Anything elseād be effortā¦
I wonder if there's already a git extension to automatically stash the working tree on every clean/reset/checkout operation...
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.
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.
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.
Even if you know git, you wouldn't assume that "discard all changes" affects untracked files. It's bad design all around
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 used git clean in my entire career.
He's right, his shit doesn't stink. His decision making was reasonable for a new programmer.
Looks like someone forgot about the 3-2-1 rule. Teachable moment.
Go on...
3 backups:
2 different places/media on-site
1 off-site
What about 2 offsite and 1 onsite? That's been my approach, mostly due to storage limitations onsite.
technically isn't a vcs supposed to be one of those different places?
Yes, but the OP went 3 months without it and then messed up during setup
Backups, backups, backups.
Poor guy basically did a git reset āhard HEAD without even a git repository
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.
all I'm learning from these stories is to stay far far away from vscode.
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).
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.
Nah you gotta submit a bug report for that
Screenshots of git issues are one of my favorite genres of meme
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?
I think it's a joke about how noobs only learn javascript and make blazing fast webapps while knowing nothing about computers.
Often times, people learn that the stove is hot by touching it.
It's easier to blame the stove than the person who touched it. But if you laugh when you watch it happen, you're probably not laughing at the stove.
This is my take on this. People blaming the software but the truth is that no software can be trusted. Make backups. Make mistakes and learn. Sometimes it will be painful, but those are the most valuable lessons
Doing a git clean is a dick move.
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.
Yeah, real developers do git clean -dxf.
let's turn this into a constructive angle for future devs and current juniors: just learn git cli, I promise you it is much simpler than it seems.
all those memes about git having like a thousand commands are true, but you really will only use like 7 at most per month.
learn push, pull, merge, squash, stash, reset, im probably missing like one or two
I promise you again: it is much simpler than it seems. and you won't have to use these stupid git GUI things, and it will save you a hassle because you will know what commands you are running and what they do
short disclaimer: using git GUI is totally fine but low-key you are missing out on so much
In reality, VSCode has local file history called "Timeline". It's enabled by default.
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
please fix uwu
If you ever happen to have 5000 uncommitted files, you shouldn't be asking yourself if you should commit more often. You should be asking yourself how many new repos you should be making.
The person didnāt have any git repository; probably a new programmer that didnāt know how version control works and just clicked discard without understanding what that means in this situation.
This person is why we have that meme where devs would rather struggle for a week than spend a few hours reading the documentation.
This is without gitignore, so probably just installed one js dependency
Jesus saves, and so should you
VS Code could really use some work in that regard and I really do feel bad for that person, but this is also just funny as heck
In fairness, it's an old issue and they did put in the work to address the issue report.
I fucking HATE when abstractions over git use cutesy names that git doesn't use.
Maybe he would prefer perforce.
Someone who does not know about "permanent delete" and not having backups, especially when switching to a new system, should have no business complaining about this.
Honestly no idea why someone would go around a completely unknown menu in a new unknown editor and randomly click things with caution completely out the window. Not having a copy or trying a blank project, not even reading any messages. I mean even if we don't know it's a nuke button, God knows what other edits it could do to your code without you knowing.
This goes beyond rookie mistake. This is something 12 year old me would do. Same with the issue page being 90% swear words.
Honestly no idea why editors give shit random names instead of using the terms git uses.
Fuck around things you don't understand, find out. Why even go near the source control area and start clicking stuff if you don't know jack shit about it.
It seems like he was trying to learn though? He clicked it, like "hell yes I want source control, let's figure this out"
"It says all my files are changed? Oh shit why did it change my files? Shit fuck, undo, how do I undo...Do I want to discard the changes? I don't even know what it changed. Yes please undo whatever changes you did to my files"
The real issue is already going 3 months without source control.
I have heard things from another apprentice who just does not use version control at all and the only copies are on his laptop and on his desktop. He is also using node.js with only 1 class and doesn't know about OOP (not sure if you even use that in js no clue š ) and has one big file with 20k lines of code I have absolutely no clue how he navigates through it
I know the type. Usually the kind of confident know-it-all who refuses to learn anything but delivers changes really quickly so management loves them. I had the misfortune to fix such a project after that 'rock-star' programmer left the company. Unfortunately the lack of professional standards in our industry allows people like that to continuously fail upwards. When I left the project they rehired them and let them design the v2 of the project we just fixed.
My company for the longest time had two engineers they would give all the new projects to. They would rush through some prototype code as fast as they could then management would bring in a new team to take the project over. The code was always garbage and crammed into one place. I kept getting new projects and instead of starting from a nice clean slate we always had to build on that garbage. It sucked so bad.
Lol. Wow.
And that is why I've been unable to work myself out of a job in all my long years as a developer.
Jesus, reminds me of a similar story. My gf once lost a job to someone who literally just pasted code into LLMs, also delivering quickly, even tho it was hot garbage. Anyhow, she spent a lot of her time fixing his shit and so her output went down. I hope that company burns to the ground with completely un manageable software.
Reading this just give me a panic attack
Those are rookie numbers. I have at least a 35k one somewhere. More than one actually.
People run their businesses on this.
He just heard monoliths were in again
Ey! Reminds me of my middle-school years! I still can't belive I made an entire game without a single class... Just storing info in arrays and writing in comments what location represents what data. But I was a literal child, too young to read guides or sit through "long" tutorials.
I don't want to sound too mean, but whenever I see anything similar at work, I wish that person get a job they're actually good at. It's fine and all that the company started hiring actual programmers to fix things, but the fact that the old crew still fucks shit up with senior privileges is a major grievance.
The person didnāt have any git repository; probably a new programmer that didnāt know how version control works and just clicked discard without understanding what that means in this situation
In case anyone else is wondering, or simply doesn't like reading screen shots of text, this is apparently a real report:
https://github.com/microsoft/vscode/issues/32405
š¤£
I dunno, ādiscard changesā is usually not the same as ādelete all filesā
Nowadays the warning even says that this cannot be undone. Maybe that wasnāt present in 1.15, though.
It was. If you go through the OP thread, one of the responses is a picture of the dialog window that this user clicked through saying, "these changes will be IRREVERSIBLE".
The OP was just playing with a new kind of fire (VSCodes Git/source control panel) that they didn't understand, and they got burned.
We all gotta get burnt at least once, but it normally turns us into better devs in the end. I would bet money that this person uses source control now, as long as they are still coding.
What exactly do you think discard means?
āChangesā are not the same thing as āfilesā.
Iād expect that files that are not in version control would not be touched.
Apparently, it means changes to the directory structure and what files are in them, not changes within the files themselves. It really ought to be more clear about this.
It means both.
Yeah. They did substantially modify the message to make it much clearer, thankfully.
Yeah. That's discussed in more detail in the code change that resulted from the issue report.
It's a ballsy move by the VSCode team to not only include
git clean
but to keep it after numerous issue reports.As others discussed in that thread,
git clean
has no business being offered in a graphical menu where a git novice may find it.That said, I do think the expanded warning mesage they added addresses the issue by calling out that whatever
git
may think, the user is about to lose some files."Changes" encompass more than you think. Creating / Deleting files are also changes, not just edits to a file.
It can also be all of them at the same time, which is why VSCode uses "Changes" instead of "Files".
And the terminology is misleading, resulting in problems. shrug.
I find it difficult to lay the blame with VSCode when the terminology belongs to git, which (even 7 years ago) was an industry standard technology.
People using tools they don't understand and plowing ahead through scary warnings will always encounter problems.
Wasn't the issue that it deleted a bunch of preexisting untracked files? So old untracked files.
If the "changes" are all your files, discarding them for me means basically delete my files, you know, the ones you are trying to add.
At the same time, OP seems a layman, and might be coming from things like Microsoft Word, where "Discard all changes" basically means "revert to last save".
EDIT: After reading the related issues, OP may have also thought that "discard changes" was to uninitialise the repository, as opposed to wiping untracked files.
Having done exactly 0 research, I going to assume it's one of those "DO NOT PRESS OKAY UNLESS YOU ARE EXPERIENCED AND KNOW WHAT YOU ARE DOING" and someone went "pffft I know what I'm doing. click now what does this option do..."
reading through it, it sounds like they opened a project in VSCode, and it saw that there was a local git repo already initialized, with 3 months of changes uncommitted and not staged. So the options there are to stage the changes (
git add
) to be committed or discard the changes (git checkout -- .
). I guess they chose the discard option thinking it was a notification and i guess the filename would be added to gitignore or something? Instead, it discarded the changes, and to the user, it looked like VSCode didrm -rf
and not that this was the behavior of git. Since the changes were never committed, evengit reflog
can't save them.From this issue: https://github.com/microsoft/vscode/issues/32459
It appears that the behavior actually included a git clean. Which is insane in my opinion. Not sure if they changed it since, but thereās definitely a dev defending it.
Yeah, it's unclear to me at the time if the dialogue box in the screenshot appeared when doing a select all operation, but it reads as though the OP dev didn't understand git, discarded their work, and got upset that it was an option.
Realistically if the dialogue box appeared, I'm not sure there would be anything else the IDE could do to prevent the dev from themselves. Perhaps reject operations affecting 5000 files? But then you'll just have someone with the same issue for 4000 files.
The issue I linked has a very good analysis of the UX issues and several suggestions for fixing these. They went with a minor iteration on the original message box, which not only includes a clearer message and the number of files affected, but also defaults to not touching untracked files (while preserving the option to delete untracked files as before).
Yeah. Building a convenient accessible context free way to run
git clean
...sure feels like the actions of someone who just wants to watch the world burn.He said they're not going to change it, just make the dialog a lot more clear and add a second button to it that will only do a reset without the clean.
The second button is actually a pretty major change!
Pretty sure the scary warnings in big bold text are more recent than this report.
Nope. The scary warning is even screenshotted and used as an example in the post report discussion.
It's quite the fun read!
4. Complain about lack of a scary warning.
The dude ranted for awhile in the issue thread and closed the issue himself too! lol
This link was included in the post but I realize that "source" was probably not the best label for it. Updated to make it more clear.
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.
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.
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.)
Donāt talk about my mom that way
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
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?
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 :
https://git-scm.com/book/en/v2
read the official book : https://git-scm.com/book/en/v2
Skill issue
I don't know anything about programming, i came here from /all, but it seems to me that a command that's this permanently destructive warrants a second confirmation dialog message reminding the user that the files will be permanently deleted and not undoable
Here is the exact warning that a user had to click through in order to get to where they got:
That's not a very good dialog box. He didn't make any changes, so discarding them doesn't sound like a problem.
There should be a notice when you enable source control that this will permanently delete all existing files with a checkbox (checked by default) that says "Add existing files to source control."
He wouldn't have seen the "Discard Changes" button at all if source control wasn't already setup (and detected by VSCode).No sane program will delete files when you initialize source control either.As I found later, VSCode did have weird behaviors with source control back then. My experience is more with the latest versions.
My sibling ran into this issue once. I'm not sure if it's a setting or a default, but vscode would assume they were working in a blank repo until they made a commit.
Sounds like this person had the project (without source control) in another IDE, tried out VSCode, and it assumed that it was all 'changes'. I don't use VSCode, do I can't say for certain, but I know my sibling lost ~4 hours of project set up for the same reason (though they immediately realized it was their fault).
Reading your comment and #32459, I realize that VSCode source control did have some major issues back then.
It looks like they have improved though, as the latest VSCode I use doesn't auto-initialize repositories anymore.
Hm ok yeah, that seems quite scary sounding so that i would strongly hesitate before clicking on "discard ALL changes". Still, I wonder if a second confirmation dialog with more information is warranted for a command that's so destructive.
I wouldn't assume "discard changes" means "delete files that existed before the editor did".
It's changes from the prior commit in the repository, which, if they had not committed anything prior, would have been an empty directory.
This is perhaps a good lesson in teaching version control as its own concept rather than "streamlining it" by bundling it with an editor.
You shouldn't be taking ownership of files and then deleting them without communication a hell of a lot better than that.
I understand what happened. I'm saying that if you're going to delete stuff that was there before the software was, your flow to adding a project should include suggesting a base level commit of everything that's there already.
That's definitely fair, creating a repository in a non-empty directory could definitely suggest auto-committing the current state if it doesn't already. I don't use VSCode so I wouldn't know.
Although now that I think about it, that could have been the intention here but not automatic, if that's why 5k+ files were staged without the user explicitly staging them. Extra tragic if that's the case.
From the git discussions around the issue, it wasn't that the files were automatically staged, but that the "discard all changes" feature invoked a
git clean
, and also deleted untracked files.Since OP's project wasn't tracked, it got detonated.
Ok then, the changes to the repository shouldve been discarded. Anything he uploaded shouldve been deleted from the server. Why were files on his local machine deleted?
The repository in Git isn't on the server, it's on your local machine.
What makes you think a server was involved here? It was a local repository, evidenced by the reporter's bewilderment that files can be deleted without going to the Recycle Bin first. Which tells us that in addition to VCS, they were unfamiliar with Windows as well.
Admittedly i dont use source control myself as im a hobbiest, but I didnt realize that git was local. As for the recycle bin bit, yeah theyre kinda dumb. Is source control different from git?
Hobbyist myself so no worries! Git is one example of source control / version control software. You normally have your local working copy of a repository and then a remote where you push your changes when they are finished or to share them with others.
It's not that. It means discard all changes made after the last change committed to this local repository.
In this case it seems like it also performed a
git clean
and deleted his untracked files too. Someone actually opened a an issue to try and prevent the behaviour in the futureThen you donāt understand git or source control in general. If you donāt commit your changes, then you discard any changes, youāre set back to the last commit. Discarding changes also includes any un-committed new files.
Which is exactly the situation the dude was in. As a newbie, it's an easy mistake to make. Telling somebody who doesn't know "well, would you look at that, you didn't know!" is not just unhelpful, it's useless and condescending.
Anti Commercial-AI license
discarding changes does not discard uncommitted new files. The VS Code button did a
git clean
which is completely unexpected. Git even refers to a git clean with completely different terminology.Note that git clean never once refers to discarding anything, and git reset never refers to removing untracked files. VS Code was doing an idiotic thing. Running
git reset --hard
ANDgit clean
. There is absolutely no reason to be runninggit clean
from an UI button ever. If you want to remove a file you can explicitly remove it.Imagine that the button said "Discard all changes" and then it ran
rm -rf --no-preserve-root /*
. Would that make sense as a button? No. It definitely would not.I guess cancelling would go back to the "Then you want to commit all files?" dialog, which the user didn't want to, he just wanted to cancel whatever the IDE was trying to start.
The problem is that these are āsource control basicsā that everyone needs to learn the hard way once it seems.
Waiting 3 months in between commits however is a really bad rookie mistake because you were worried about making a commit that wasnāt perfect.
the problem is that VS Code ran
git clean
if you clicked yes, which is completely idiotic behavior. No other git client, text editor, or IDE on the planet does that.Either way, waiting 3 months worth of work before a commit is the big mistake here.
I think they hadn't ever used git before, and according to at least one person in the linked issue, vs code might have auto initialized the git repository for the user.
In fairness, ALL git terms feel backwards at first.
Imperfect commits never existed when you squash.
Squash ftw. Simpler clearer history.
Interesting. I wouldn't know, because I code everything perfectly the first time.
Disclaimer: The above flagrant lie was brought to you by my also using rebase and squash to hide all of my mistakes.
They clicked discard changes, confirmed it, and the computer did as instructed. This operation is normally not so destructive as it only discards uncommitted changes to realign the local directory with the remote server. Unfortunately for user, it sounds like they have never committed a change, so realignment meant reverting to an empty folder.
I think itās important to know that this program is for code developers, and the issue here is with a tool called git. Git is like file saving on steroids, because on top of saving a single file, you save many changes to files in git, add a comment for why you made those changes, and share your changes across dozens of files with other developers.
What this guy did was develop for many months after starting to use git, but he never actually committed the files. Then he asked for to reset everything back to the original state, something that I do multiple times a day, and it gave him a warning that original means original and you will lose everything. And he said do it anyways.
No he asked for a discard after importing the project into VS Code. discard in git terms refers to
git reset
, notgit clean
. Even if he wanted to run agit reset
then this version of VS Code would have run agit clean
and deleted everything. Imagine he committed all 5000 files, but had a secret.json that he hadn't committed. He didn't add it to gitignore either. Running agit reset --hard
will not delete this file, but the VS Code button did exactly that because it ran agit clean
.Perhaps. Still I am not sure why someone who is not aware of this would be using VSC. If they are a student then what kind of project are they working on that they have so many files?
I'm sure 99% of the files were node modules. The npm bloat is real.
That is wild.
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.
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
Because āthe underlying Git nukes them right away, so why shouldnāt we perma-delete the files, too?ā
Anything elseād be effortā¦
I wonder if there's already a git extension to automatically stash the working tree on every clean/reset/checkout operation...
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.
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.
Anti Commercial-AI license
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
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.
Even if you know git, you wouldn't assume that "discard all changes" affects untracked files. It's bad design all around
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.He's right, his shit doesn't stink. His decision making was reasonable for a new programmer.
Looks like someone forgot about the 3-2-1 rule. Teachable moment.
Go on...
3 backups: 2 different places/media on-site 1 off-site
What about 2 offsite and 1 onsite? That's been my approach, mostly due to storage limitations onsite.
technically isn't a vcs supposed to be one of those different places?
Yes, but the OP went 3 months without it and then messed up during setup
Backups, backups, backups.
Poor guy basically did a git reset āhard HEAD without even a git repository
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.
all I'm learning from these stories is to stay far far away from vscode.
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).
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.
Nah you gotta submit a bug report for that
Screenshots of git issues are one of my favorite genres of meme
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?
I think it's a joke about how noobs only learn javascript and make blazing fast webapps while knowing nothing about computers.
Often times, people learn that the stove is hot by touching it.
It's easier to blame the stove than the person who touched it. But if you laugh when you watch it happen, you're probably not laughing at the stove.
This is my take on this. People blaming the software but the truth is that no software can be trusted. Make backups. Make mistakes and learn. Sometimes it will be painful, but those are the most valuable lessons
Doing a
git clean
is a dick move.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.Yeah, real developers do
git clean -dxf
.let's turn this into a constructive angle for future devs and current juniors: just learn git cli, I promise you it is much simpler than it seems.
all those memes about git having like a thousand commands are true, but you really will only use like 7 at most per month.
learn push, pull, merge, squash, stash, reset, im probably missing like one or two
I promise you again: it is much simpler than it seems. and you won't have to use these stupid git GUI things, and it will save you a hassle because you will know what commands you are running and what they do
short disclaimer: using git GUI is totally fine but low-key you are missing out on so much
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
please fix uwu
If you ever happen to have 5000 uncommitted files, you shouldn't be asking yourself if you should commit more often. You should be asking yourself how many new repos you should be making.
The person didnāt have any git repository; probably a new programmer that didnāt know how version control works and just clicked discard without understanding what that means in this situation.
This person is why we have that meme where devs would rather struggle for a week than spend a few hours reading the documentation.
This is without gitignore, so probably just installed one js dependency
Jesus saves, and so should you
VS Code could really use some work in that regard and I really do feel bad for that person, but this is also just funny as heck
In fairness, it's an old issue and they did put in the work to address the issue report.
I fucking HATE when abstractions over git use cutesy names that git doesn't use.
Maybe he would prefer perforce.
Someone who does not know about "permanent delete" and not having backups, especially when switching to a new system, should have no business complaining about this.
Honestly no idea why someone would go around a completely unknown menu in a new unknown editor and randomly click things with caution completely out the window. Not having a copy or trying a blank project, not even reading any messages. I mean even if we don't know it's a nuke button, God knows what other edits it could do to your code without you knowing.
This goes beyond rookie mistake. This is something 12 year old me would do. Same with the issue page being 90% swear words.
Honestly no idea why editors give shit random names instead of using the terms git uses.
Fuck around things you don't understand, find out. Why even go near the source control area and start clicking stuff if you don't know jack shit about it.
It seems like he was trying to learn though? He clicked it, like "hell yes I want source control, let's figure this out"
"It says all my files are changed? Oh shit why did it change my files? Shit fuck, undo, how do I undo...Do I want to discard the changes? I don't even know what it changed. Yes please undo whatever changes you did to my files"
And poof.
Who learns with five thousand files though?