 I'm not really going to bother introducing myself. All you need to know is my name's Rahul. And I'm here to tell you that if your history sucks, it does. Now before you guys go up in arms and like my good history does not suck. Well, here it is. What do I mean by your? Well, in this case it is the indefinite you as in like, you know, the generic one of you not necessarily you you but are you. And when I say git, I mean like git that we normally use not in the story files because he didn't name it after himself after all. History, when I say history, everything like everything about your get history sucks. Absolutely everything. And when I say sucks there's a reason why that pile of poo is there. You will find out eventually. So yes, you'll get history sucks. And you'll get history sucks for a bunch of reasons. Right? One of the reasons you'll get history sucks is because your commit message is a human readable diff. Or you don't explain what your commit tries to achieve. You just tell me what I could already find out from the diff, which need not be human readable, by the way. Or your commit message explains what someone can do with your program after this commit is merged. Again, nothing to do with what your commit actually does. Or Is this a PG-13 event? Okay, your commit message is a fucking user story. I don't know why people like to do this and I mean, I have examples for all of these things, right? Ignore the hashes they generated by me because I couldn't be bothered. But the commit messages are rephrased from actual projects on GitHub. I will not name any of them and I have removed most, I pretty much removed any identifying characteristics of the way people type. So you will not know where these are from, but I assure you they're from somewhere. So you have stuff like increment each element of the list by one. Why thank you captain? Obvious. I could have done a git log-p for that. Or something like semi-colons are good. Sure. Semi-colons are good, but semi-colons might be bad. And what are you actually trying to do with that commit? I don't know. Now you have other guys who are like, not everyone can pick the blue button and get bananas. Okay, but what does your commit actually do? It doesn't tell me anything. And then you have to use a story. As a commit, I can merge master into master and infuriate dot dot dot because you are not supposed to have a shot log beyond 50 characters. There's a reason this is there, which I will show you if I have time. Otherwise, I'll show you afterwards once the event is over. Anyway, your git history sucks. And your git history sucks because you say bug fixes without without telling me which bug you're fixing. Great. Thanks bug fixes. Oh, that's amazing. Or you mentioned a GitHub bug issue without summarizing it. Well, a context switches are expensive. I'm looking at your git history in my terminal. Now I need to open a browser, go to GitHub, find your project, find the issue number, realize it's closed, all that work. And of course, there's the other thing, right? Sourceforge, everyone used it. Everyone used issue numbers on Sourceforge. It died. Google code. Everyone used it. Everyone used issue numbers on Google code. It died. Now you're using GitHub issue numbers extrapolate. This does exist in the project, right? Obviously in standard git log format, that is new. This is old. Fixes number 42. Many, many years later fixes number 42. Wait. Do you mean the same number 42 or never mind? Let's not go there. If you have this amazing thing, it says bug fixes. Great. It fixes bugs. You look at the log and it's like 500 lines are changing. Like I don't know what bug this fixes. And so you get history sucks. Other reasons why I get history sucks. You get history sucks because you don't have consistent capitalization. You think this doesn't matter, but when you're looking through a really long git log, it it really does matter. And you don't have consistent punctuation. Sometimes you have a dot at the end. Sometimes you don't. Sometimes you have colons in the middle of somewhere. Sometimes you do bug fix colon. Sometimes your B is capital and you don't have a colon. Make up your goddamn minds. And of course, you don't have consistent tensors in your commit messages. You have things like fixed bug, fixed bug, fixes bug. We'll fix the nation of the universe at some point. And you have like capitalized it. Capitalized allow the nation of users are non-capitalized added password security fix. Again, the tensors are not Like what what tens am I supposed to use? There is an answer to this always use imperative present tense. A commit message does something. But no, you guys all like to have your past tensors and create message and goes added this and like great It added that but the commit does not added that the commit adds that Your get history sucks because You sometimes roll your face on the keyboard when you when you prompt it for a git commit message You say oh no, I forgot to give it dash M poop. And so you end up with like fast fast fast AFDF things or As I mentioned earlier You have emoji in your commit messages. This is something that honestly github has Holy shit, they're responsible for half of it Because until recently Most people could not read the emoji in any way in that get logs But no now they can and so you have something like this amazing commit message, which is like If I remember correctly smiley face in medical mask Point a finger right point finger right index backward and pile of poop would be the actual unicode reading of this And then you have this which is someone who realized they fixed a bug that they were supposed to and they're really angry That yes, I get that it works. You don't need three of those besides that's about commit message anyway Right and that again is more face rolling. Hi guys And then like you have like well the warcraft references and commit messages and then you have this one nice commit message at the bottom I Had to put this in there because I was going insane just looking at this list of stuff You're bad at formatting as well not not only can you not write commit messages? You're bad at formatting. You see this This is Vim. It's the best text editor around Emax is a similar to Vim Now when you use Vim to write a message and it's too long it gets cut off The color there shows you same way second line blank lines If you derp and herp and you write in the black line it highlights in red for you again all these things are there for a Reason there's a lot of parts of git that rely on you following this form I think correctly if you don't I will show you what happens Just There is more to life than commit messages Right. Let's talk about graphs because graphs are pretty See if this graph this is in history Yes, most of you have seen something that looks like this big history though. Usually it's vertical Well, I use graph is so it's horizontal You have good history Just so you know the yellow ones are where you branched off from and the red ones are merge commits specifically merge commits because I hate those things That is history as well and that is history Such a cute little side emoji you make emoji sad when you when you fork off a feature branch from a feature branch Don't do that And that's why I get history is bad and if you do this you end up like no JS you get this on the side of your blog If my if I had a lower-right screen, that would be half my thing And this is not even the worst part of it now, of course, you guys would be like well It's a big project these things are bound to happen. Well angular is a bit big project look at what angular does Granted they have a singular branch floating around here and there And I did pick the best part of angular show you but nowhere absolutely nowhere do they have anything even close to this Right. I searched for every line that contains either a vertical bar and have forward slash or a backslash No, JS twelve thousand lines Angular eight hundred lines. They know what they're doing follow what they do also consistency of messages craziness Now of course you guys hear this and you're gonna have a bunch of reactions, right? The first one is but merging is easy now when you say but merging is easy What everyone else here to say Is I can't be bothered to read about my tools Okay, fine Then some of you are like well, but the commits remain logically separate if you merge and you leave the branch floating around, right? I mean, I might merge the branch into another version some point and Then when you say that all I'm hearing is I'm bad at writing commit messages And I'm gonna merge things will you know the ad have much conflicts all over the place And also what is that cherry big thing you speak of I don't have a ladder and we don't have cherry trees in Singapore Of course you also have other reasons where people give me why they have such bad good history like well I'm working with this person That makes it a shared history, right? I'm not supposed to override shared history When you say that what I hear I Think things are black and white. They can only ever use merge or rebase. You can't ever like you know Perhaps rebase a feature branch right before you merge it. No, you guys have never heard of that clearly Of course, you have all these people like but I work in a really big team you see and like Merging is hard, but not as hard as rebasing. I mean, I don't have to read my commit 700 times when I rebase 700 commits a y You're abasing 700 commits Be when you say that all I hear is the base is too hard and we have no time Also, we don't have this guy called a repos to it Which actually a lot of people don't have which is also why your history sucks Nobody should ever be able to merge into develop even after code review except one or two people do it And obviously when you have a small team of people up to maybe 10 20 people really depends on how big your team is and how many Develop branches you want to have but seriously people shouldn't be allowed to push into a branch other than their own feature branches Their own dev branches The moment you have a serious branch It has to be one guy doing it so that you never have a conflict because that guy just pulls your stuff He rebases he merges he pulls your stuff. He rebases he merges That's supposed to be a sole job and that's how your nice history, but nobody does that and so all your get history sucks Then you have another group of people who are like, but I was never taught about rebays And that to me sounds actually doesn't sound stupid at all. That sounds perfectly fine in which case help me Obi-Wan You're only home Help is out there Talk to someone who knows a lot about get they will tell you how to do things the proper way without having bad history Of course, you have also these this class of people is the best class of people ever some of them are trolled Some of them really believe in it. They're like, but I really like merging willy-milly And randomly capitalizing my commit messages And using emoji in my commit messages pile of poop And not following the 50s or a 72 rule Which by the way was the length of the lines you're supposed to follow first line 50 characters second line 0 Third line onwards 72 Vim auto wraps that for you Most sane editors auto wrap that for you, but you can override it and a lot of people do I Mean that's fine. If you want to do all these things you want to randomly capitalize on all that stuff Hurry on go ahead and do what you want to do just don't expect that they just don't let me get near your rapper because I'll just Murder you or something and don't expect sane people out there to work on your projects Because the biggest problem with having really really really bad history Is if I'm trying to find out the commit that caused the bug if I'm trying to do a get by sect Which I think a lot of people don't talk about enough When I have a merge in that in there that makes the bicec really annoying Of course, you all have also these people like bicec, but why would I want to do bicec? I've see I for a reason. Yes Your see I is not as only as good as your tests are your tests are only as good as you are and if your commit history Looks like that. I'm not convinced you're any good in the first place again, don't let me near your repo because You're getting history sucks. Bye I only I want thing to add to that He can't 26 September submit talks vote for talks attend ticket sales opening next week