• bitwolf
    link
    fedilink
    English
    arrow-up
    3
    ·
    21 minutes ago

    It does warn you it will erase the file when you discard…

  • kamen@lemmy.world
    link
    fedilink
    arrow-up
    13
    ·
    3 hours ago

    That has the same energy as complaining that a file manager has “Delete” in the context menu.

  • kamen@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 hour ago

    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).

  • AusatKeyboardPremi@lemmy.world
    link
    fedilink
    arrow-up
    18
    arrow-down
    1
    ·
    edit-2
    3 hours ago

    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.

    • BehindTheBarrier@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      2 hours ago

      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.

      • AusatKeyboardPremi@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        1 hour ago

        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.

  • Michal@programming.dev
    link
    fedilink
    arrow-up
    3
    ·
    3 hours ago

    If the files were already staged then git should have blobs in the git folder, so they should be recoverable.

    • marcos@lemmy.world
      link
      fedilink
      arrow-up
      8
      ·
      2 hours ago

      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.

      • JohnEdwa@sopuli.xyz
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        1 hour ago

        “discard changes” button - the 5000 “new file created” changes, specifically.

  • AnUnusualRelic@lemmy.world
    link
    fedilink
    arrow-up
    8
    arrow-down
    4
    ·
    edit-2
    4 hours ago

    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…

    • Forbo@lemmy.ml
      link
      fedilink
      arrow-up
      9
      arrow-down
      1
      ·
      3 hours ago

      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”.

      • ulterno@programming.dev
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 hours ago

        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 used git 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 see blame in the editor itself and maybe a better representation of tree, I don’t feel the need to use any git 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 used git CLI).

  • mvirts@lemmy.world
    link
    fedilink
    arrow-up
    35
    ·
    8 hours ago

    Obligatory mention of file recovery as an option if you get in this situation.I recommend testdisk but there are other more gui friendly options.

    NTFS takes a relatively long time to destroy the data so chances of recovery are good on Windows.

  • _____@lemm.ee
    link
    fedilink
    English
    arrow-up
    104
    arrow-down
    1
    ·
    10 hours ago

    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

    • Piatro@programming.dev
      link
      fedilink
      English
      arrow-up
      5
      ·
      5 hours ago

      The main draw to the CLI for me is portability. I’ve been a dev for ten years now and used tons of different editors on different platforms and while each one had a different way to describe the changes, how to commit, or how to “sync” (shudder), the CLI hasn’t changed. I didn’t have to relearn a vital part of my workflow just because I wanted to try a different editor.

    • apostrofail@lemmy.world
      link
      fedilink
      arrow-up
      8
      arrow-down
      4
      ·
      5 hours ago

      How about Git’s CLI stop being so shit? All of the options are obtuse & usually 3 ways to do the same thing.

      Developers should normalize non-Git DVCSs.

    • Atlas_@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      5 hours ago

      For a first step you can get away with just add, commit, push, and pull. Maybe reset, but tbh using git like svn at first is fine.

      Next branch, checkout and merge. At this point show, log, bisect and blame also start to be useful.

      I’m not a fan of stash, and would instead recommend reflog and cherry-pick as the first two advanced commands to learn. Then rebase and squash.

    • MajorasMaskForever@lemmy.world
      link
      fedilink
      English
      arrow-up
      16
      arrow-down
      1
      ·
      9 hours ago

      Every time I mentor a dev on using git they insist so much on using some GUI. Even ones who are “proficient” take way longer to do any action than I can with cli. I had one dev who came from SVN land try and convince me that TortoiseGit was the only way to go

      I died a little that day, and I never won her over to command line despite her coming to me kinda regularly to un-fuck her repository (still one of the best engineers I ever worked with and I honestly miss her… Just not her source control antics)

        • MajorasMaskForever@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          39 minutes ago

          That is the one use case I’ve seen where a gui is absolutely faster.

          In my line of work, I primarily work on embedded systems or process automation so any new files in the repo directory either need to be added for tracking or to the ignore file. I’m not saying it will never happen, but at least in my experience it happens so rarely that I always try to teach command line when possible

        • ulterno@programming.dev
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          1 hour ago

          Did you not know?
          You can simply select all files you want to commit, in the File Manager, Ctrl+C, then paste in the terminal and it will automatically add all those file names (full paths) separated with spaces at the cursor. At least in KDE: Dolphin -> zsh + Konsole it does.

          And sure, it might look like 2 extra steps, but you will still be clicking around a lot in case of a GUI anyway.

          I tend to just type partial filenames and use tab completions, which are also pretty configurable. And the only dissatisfaction I have rn, is that I don’t have zsh module for completions with pascal case and snake case.

      • Antiproton@programming.dev
        link
        fedilink
        arrow-up
        8
        arrow-down
        1
        ·
        8 hours ago

        The difference in speed is familiarity, not some inherent efficiency gain by typing commands into the cli.

      • dave@feddit.uk
        link
        fedilink
        English
        arrow-up
        5
        ·
        8 hours ago

        So I’m normally a command line fan and have used git there. But I’m also using sublimerge and honestly I find it fantastic for untangling a bunch of changes that need to be in several commits; being able to quickly scroll through all the changed files, expand & collapse the diffs, select files, hunks, and lines directly in the gui for staging, etc. I can’t see that being any faster / easier on the command line.

        • MajorasMaskForever@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          29 minutes ago

          Heh, I guess this shows my corporate software dev experience. Whenever I’ve taught git workflows it was always paired with a work ticketing system where any changes you were making were ideally all one single set of changes. If you need a feature or bug fix someone else was doing that was being done on another branch which you could pull into your code early and for tracking purposes we always made sure the other person merged into main first. The only time I’ve seen per line manipulation with git was when someone made a ton of changes in a file and wanted to revert a handful of lines.

          Everything else you mentioned I’ve had a web git host like gitlab or bitbucket for, but I kinda put that more into peer review workflow than git itself

    • Cethin@lemmy.zip
      link
      fedilink
      English
      arrow-up
      6
      ·
      edit-2
      8 hours ago

      Personally, I’m pretty good with the CLI version, but sometimes I just use the Code VC interface. For some tasks (basic commit, pull, push) it’s pretty fast. I don’t know if it’s faster than CLI, but I switch between them depending on what I’m doing at that moment. Code has a built in console, so using either is pretty seemless and easy. If you only use the GUI you won’t ever understand it though. I think everyone should start with CLI.

      Honestly, this is true for almost everything. GUIs obfiscate. They don’t help you learn, but try to take control away so you can’t mess up, and as an effect can’t do everything you may want.

    • thebestaquaman@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      8 hours ago

      I use gitkraken for two primary purposes:

      1. Having a visual representation of my project history.

      2. resolving merge conflicts

      Of these, the first is really the only thing I really want a GUI for. I’ll just have it open on my side-screen if I’m managing some more or less messy branch structure or quickly want an overview of what has been done on which branches, where common ancestors are, etc. All the actual doing of things is done from the CLI, because it’s just better for that.

  • LANIK2000@lemmy.world
    link
    fedilink
    arrow-up
    39
    arrow-down
    6
    ·
    9 hours ago

    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.

    • Cethin@lemmy.zip
      link
      fedilink
      English
      arrow-up
      20
      arrow-down
      4
      ·
      8 hours ago

      This is a disease of GUIs. Most people are so used to having their hands held and being unable to make a mistake that when a GUI actually gives you the power to fuck up they don’t expect it. I promise you, if this user was using the CLI, this wouldn’t have happened as easily.

      • Kbobabob@lemmy.world
        link
        fedilink
        arrow-up
        6
        ·
        4 hours ago

        I promise you, if this user was using the CLI backed up their files, this wouldn’t have happened as easily.

        • Cethin@lemmy.zip
          link
          fedilink
          English
          arrow-up
          3
          ·
          4 hours ago

          That too, but it seems like this was them attempting to back up their files. They just critically failed.

          • Kbobabob@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            edit-2
            3 hours ago

            Using a program that’s not designed to be a backup solution that you are also unfamiliar with sounds even worse. Lol

    • calcopiritus@lemmy.world
      link
      fedilink
      arrow-up
      21
      arrow-down
      1
      ·
      9 hours ago

      I don’t even know why people ITT are blaming the IDE and completely ignoring this.

      When you learn git, you do so on a dummy project, that has 5 files which are 10 characters long each.

      An IDE is not made so you can’t break things, it is tool, and it should let you do things. It’s like complaining that Linux will let you delete your desktop environment. Some people actually want to delete your desktop environment. You can’t remove that option just because someone can accidentally do it by ignoring all the warnings.

      • thebestaquaman@lemmy.world
        link
        fedilink
        arrow-up
        14
        ·
        8 hours ago

        Got will not delete untracked files though, which is what happened here. If you want to discard changes to a file with git, you first have to commit the file to the index at some point, which means there’s only ever so much damage an erroneous “git restore” or “git reset” can do. Specifically, neither of them will delete all the files in an existing project where VC has just been added.

        • calcopiritus@lemmy.world
          link
          fedilink
          arrow-up
          6
          ·
          5 hours ago

          This user was not using git though, he was using vs code. That button doesn’t say “git reset” it says “discard all changes”. And btw, what it does is “git clean”, which is something that git can do.

          Just below the button there is a list of all the changes. In his case, there were 3000 changes of the type “file creation”. Discarding a file creation can only be made one way: deleting the file.

          Anyway, this user is presumably in his learning phase, I would not assume that he knows what git reset or git restore actually do.

          • Hawk@lemmy.dbzer0.com
            link
            fedilink
            English
            arrow-up
            3
            ·
            4 hours ago

            In other IDEs this discards tracked changes, untracked files usually stay untouched.

            In my opinion, it’s a combination of user error and bad implementation here

      • Cethin@lemmy.zip
        link
        fedilink
        English
        arrow-up
        5
        arrow-down
        1
        ·
        8 hours ago

        They could have a warning though. I agree with you, but there are some easy ways to prevent this from happening. It just takes time to implement, and would be required in other places too. Is it worth the dev time? I doubt it.

        • calcopiritus@lemmy.world
          link
          fedilink
          arrow-up
          4
          ·
          5 hours ago

          There is a warning. IIRC it says “are you sure you want to discard all changes? This action is unreverisble”. In the context of version management. Creating a file is a change. And just below the button to discard all changes is the list of changes. In that list he could’ve seen 3000 changes of the type “file creation”, when you discard a file creation, it means to undo the creation, which is a deletion.

          The button days what is going to do. There is a warning about what it’s going to do. And there is a list of the exact changes it’s going to undo.

          The only way to avoid this from happening is to not have the button exist. In that case, the users that actually want to discard all changes would be unable to do so.

  • AnAmericanPotato@programming.dev
    link
    fedilink
    English
    arrow-up
    126
    arrow-down
    4
    ·
    12 hours ago

    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.

    • kehet@sopuli.xyz
      link
      fedilink
      arrow-up
      4
      arrow-down
      1
      ·
      4 hours ago

      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.

    • Omega_Jimes@lemmy.ca
      link
      fedilink
      arrow-up
      62
      arrow-down
      2
      ·
      11 hours ago

      I’m not great at English, but “discard all changes” shouldn’t ever mean “Delete”.

      • Michal@programming.dev
        link
        fedilink
        arrow-up
        35
        arrow-down
        6
        ·
        10 hours ago

        In the context of version control it does. Discarding a change that creates a file means deleting the file.

        • thebestaquaman@lemmy.world
          link
          fedilink
          arrow-up
          11
          ·
          8 hours ago

          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.

        • Omega_Jimes@lemmy.ca
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          8 hours ago

          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.

          • FiskFisk33@startrek.website
            link
            fedilink
            arrow-up
            2
            ·
            8 hours ago

            I guess the newly created git repository was empty, and all the files that was present in the folder represented “changes”

      • stebo@lemmy.dbzer0.com
        link
        fedilink
        arrow-up
        7
        arrow-down
        1
        ·
        7 hours ago

        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.

    • cocobean@bookwormstory.social
      link
      fedilink
      English
      arrow-up
      38
      ·
      11 hours ago

      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

      • murtaza64@programming.dev
        link
        fedilink
        arrow-up
        3
        ·
        9 hours ago

        I wonder if there’s already a git extension to automatically stash the working tree on every clean/reset/checkout operation…

      • stetech@lemmy.world
        link
        fedilink
        arrow-up
        4
        arrow-down
        1
        ·
        10 hours ago

        Because “the underlying Git nukes them right away, so why shouldn’t we perma-delete the files, too?”

        Anything else’d be effort…