Coding Blocks - Git from the Bottom Up – Commits

Episode Date: August 29, 2022

We are committed to continuing our deep dive into Git from the Bottom Up by John Wiegley, while Allen puts too much thought into onions, Michael still doesn't understand proper nouns, and Joe is out h...at shopping.

Transcript
Discussion (0)
Starting point is 00:00:00 You're listening to Coding Box, episode 192. Eight more to go, we get 200. I think that's like a, do we get like a free sandwich or something? Like, you know, 10th one, it's free, something free, I don't know. Subscribe to us on iTunes, Spotify, Stitcher, wherever you like to find your podcasts. I hope we're there. Man, if we're not by now, then I guess you should probably use iTunes, Spotify, or Stitcher then. What is this random thing that you're using? now, then I guess you should probably use iTunes, Spotify, or Stitcher then. Right.
Starting point is 00:00:25 What is this random thing that you're using? Yeah, no doubt. Although somebody will reach out and be like, I didn't find you on Azeguas. And they'll be like, okay. All right. Is that a thing? It is now. Yes.
Starting point is 00:00:37 All right. So you can visit us at www.codingblocks.net where you can find all our show notes, examples, discussions, and more. And you can send your feedback, questions, and rants to comments at codingblocks.net where you can find all our show notes, examples, discussions, and more. And you can send your feedback questions and rants to comments at codingblocks.net. And we got a Twitter at a coding blocks. And if we've got a website, a coding box that we can go there and we got links to other things. So you can check that out.
Starting point is 00:00:57 And when you're done, you should know that I'm Joe Zach and I'm Michael outlaw. And I am Alan Underwood. We're talking about get, so get get excited are we because i was gonna ask you guys where do hamburgers go to dance but yeah we can talk about get instead well in that line now i want to know about these burgers me too the meatball. Oh, that's good. I like it. All right. So,
Starting point is 00:01:27 uh, we want to give a thanks for the newest reviews. So from Alex, uh, Woodhead, we have a new review. So thank you very much for that. And I haven't read that one.
Starting point is 00:01:39 I need to, you didn't. No, it didn't. I've, it was really good because it was a three plus star review all right we love those oh yeah it was he says as requested here's a three plus star review oh thank you alex that's excellent and and super thanks because it was a five star but you know technically he was
Starting point is 00:02:00 accurate that it was a three plus star review so yeah that's amazing all right well hey uh i'm doing ludum dare uh which we talked about uh yeah ludum dare it doesn't look it doesn't look it's uh the name in the notes does not look like it's pronounced uh it looks like ludum dare but do you guys remember talking about this no all right All right. I think so. So it's a game jam. It may be the first game jam. I forget. It's over 20 years old. They've been doing it for 20 years.
Starting point is 00:02:31 They're on number 51 now coming up in the end of September, September 30th to be specific. And going on to October 3rd. And I took a day off work and I'm going to do it. You took a day off work for a while. This is serious. Now we're getting somewhere. Doing it for real. So gonna have some fun make a game so yeah awesome yeah we we talked about this before um two-ish years ago i think i'm i'm double checking yeah i believe i'm gonna say ludum dare but you yeah, we'll say it's something else.
Starting point is 00:03:06 How do you pronounce it again? Dari? Ludum Dari. I forgot what the name stands for. Okay. Yeah, it was episode 146. We talked about it. Yeah, that's right.
Starting point is 00:03:19 That's why I don't remember it. Hey, I have a question for you guys. This is a very serious question. Is it really a joke? No, it's not a joke. I don't have a joke. you guys. This is a very serious question. Is it really a joke? No, it's not a joke. I don't have a joke. Oh, come on. Be a joke.
Starting point is 00:03:28 But you guys like onions? It's a joke. Ah, yes. Here we go. No, no. Do you like onions? No, they're gross. You don't like onions?
Starting point is 00:03:36 Really? What about you, Allah? Is this like when it seems like nobody likes onions? Because wasn't that like a podcast or something? No, I don't know. No, this is a serious question. Do you like onions? I do. I can't wait for the punchline.
Starting point is 00:03:48 Do you ever cut onions? There's no punchline, I swear. Do you ever cut onions? Underwater. What? I don't know what that means. Does that keep them from making you cry or something? Yeah, it does.
Starting point is 00:04:02 It keeps you from crying. Like what? I don't understand why that was so funny. Like the looks that I, if the audience could have seen the looks that I just received. I thought it was some secret message. Well, the reason I ask is like
Starting point is 00:04:14 I was cutting an onion tonight and you know how like there's the flaky layer on the outside and it's the part that you're trying to get rid of. And then there's a really thin layer right up underneath that that's kind of a pain in the butt to get off. But if you can do that,
Starting point is 00:04:26 you could salvage like the really big, thick onion outer layer. Like do you get it? Like when you're cutting an onion, do you just like, whatever I'm sacrificing that, that really good sized outer onion, just so that I can get this thing off faster.
Starting point is 00:04:39 You spend the time to like actually get that thinner one. That's right there on the outside. Curious. Like how deep, i'm sorry i was putting a note there because i did find uh i was correct that nobody likes onions as a podcast um but but do you do i try to get like thinnest one off or do you try or do you just like sacrifice that big one yeah i outside? I don't care, I guess. I never put that much thought into it. I don't think I did until tonight, but I was cutting an onion. Now, you want to try.
Starting point is 00:05:12 Right? Yeah. I think I just tossed the outer one because it's kind of thicker and kind of gross anyway. I mean, they're all gross. What? It's not gross, man. It's better in the middle. There's no bad part of an onion.
Starting point is 00:05:25 I agree. I don't care what that other podcast tells you. Onions are great, especially sauteed. Oh, dude. It's like now purple onions. I can totally get behind the fact that you don't want to eat those things raw because they stick with you for a couple of days. But yeah. All right. So at any rate, I just had to ask that.
Starting point is 00:05:41 It was a little bit off the wall, but I had that thought tonight when I was cutting an onion. And I was like, man, I wonder if I'm the only one. I really thought we were going to a punch line. Like, I'm still. I didn had to ask that. It was a little bit off the wall, but I had that thought tonight when I was cutting an onion and I was like, man, I wonder if I'm the only one. Man, I really thought we were going to a punchline. We're going to get James Tadar on the show. That guy really knows his onions. Oh, does he? Is he an onion guy? All right, we're going to make this happen.
Starting point is 00:05:57 He really knows his onions. For all the new listeners, I promise you it doesn't get any better than this. You just heard the best material. This is as good as it gets. Every episode is like that. So, yeah, I'm sorry. All right.
Starting point is 00:06:16 So I guess we can get into the meat of it this time. Oh, I see what you did there. I thought that was a throwback to my hamburgers. Oh, that's it. Oh yeah. I hadn't even, but that's not what you did. So, okay. I guess I didn't see what you did or I saw what you didn't do.
Starting point is 00:06:31 You saw what I didn't do. Yeah. That's really good. All right. So, so we're, we're back into the get conversation here and we failed miserably on part one. I think we redeemed ourselves a little bit on part two and, and I'm really hoping hoping that in this one this kind of drives home some of the points that we've been talking about because we are committed now i see what you did there so speedo just to kind of reiterate a little bit from uh last episode and this is one of those rare episodes where if you haven't heard
Starting point is 00:07:02 the last one you actually should go back. Yeah, totally. Everything else would make a lot more sense. But last episode, we talked about how Git, it really boils down to just blobs, trees, and commits. And that's it. That's it. Fundamentally, that's it. So if you can wrap your head around that, even if you've been using Git for years like we have and had no idea, or at least I didn't have any idea this is what was going on behind the scenes, then yeah, wrap your head around that. And we have a link here in the show notes to this section because this will be helpful for you to follow along
Starting point is 00:07:36 because we're going to cover some commands at the bottom. Like we're going to talk about them only so that you'll have an idea that they exist. I mean, there's no way you're going to remember all this stuff, but it'll be nice to know that they're there. So the first thing is a commit can have one or more parents. I think we talked about this before. If we haven't. Yeah, we did some experiments too. Oh yeah. Well, I mean the first example of like a year, you're like, well, why would a commit have more than one parent?
Starting point is 00:08:04 But every merge you've ever done is an example of a commit that has more than one parent. Right, right. When you're bringing two together, that's when it happens. So what they said next is for this reason, these commits can be treated like branches because they know their entire history. Right. So you can reference it by doing a get branch dash V. You can actually see the commits that are being referenced in that particular branch at any given time. Wasn't that the same thing that you used as a tip for the seeing where you're, uh seeing where you branched from if you did... Dash VV.
Starting point is 00:08:48 It's actually more verbose. But yeah, it was. It was based on if you did your checkout and you did a dash T to track it, right? Correct. Okay. And if you wanted to see what you were tracking, then you could do a get branch dash VV, and then it would show you which branch it was tracking from. Would you like to know which episode that was? That's been a while back. Yeah. One 49. Oh, is it? No, I don't know. I thought you, I thought you had it. No,
Starting point is 00:09:17 I thought I did too. And then I was like, Oh wait, no, that wasn't it. So I don't know. I'll have a link to that one in the show notes because there was a tip of the week where Alan had said, hey, here's an easy way that if you want to. The premise of the tip was if you ever are working in a branch, you're like, wait a minute, where did I branch from? Especially if you're the type of developer that might have like you're juggling multiple things at one time. And so you have multiple branches and you're like, wait, where did this branch start from? Then that's where Alan's tip came into uh to play yep i'll find it so the next thing that we have here and this is this is another one if you remember that get their blobs trees and commits a branch is just a named reference to a commit
Starting point is 00:09:59 yeah and we kind of hit on this last time but you know um just to like they they the author super drills this in to it because he starts it off by saying say it with me right right he was actually pretty funny i mean honestly this this technical document that he's written is is entertaining while it's got a ton of technical stuff in it he's actually a pretty good writer. So I recommend going and checking it out. Yeah, I definitely did appreciate, uh,
Starting point is 00:10:29 you know, the, the humor here and there interjected in. Yeah. So this is where they call out and we talked about it on the last episode, a branch and a tag are mostly the same thing. And I think outlaw called it out explicitly on the previous episode is the only real differences in a tag. It will only ever reference that one commit hash that it did.
Starting point is 00:10:53 It pointed to originally, whereas with a branch, as you commit more things, that branch now references a new commit, right? That doesn't happen on a tag. Yeah. You're we, we referred to it as alias, an alias. It was, it was constantly being moved along. And I found by the way, where that reference was to the, uh, um, that get tip. And it was episode one 82. If you were curious to go back and listen to it. Okay, cool. So we just said that branches are really just names that point to a commit. It's the latest commit in that particular branch. And then tags have descriptions that also point to a commit.
Starting point is 00:11:37 But in that case, the commit can't change. So yeah, they made a point of calling out like, you know, these two things are very similar, but tags have more descriptive metadata about them than a branch does. Right. You can actually put a message on them as well, right?
Starting point is 00:11:53 As opposed to. You can annotate them. Yep. Yep. Yep. So they're a little bit more powerful. Yeah, it is not powerful. You can add more descriptiveness to them because it's not supposed to change.
Starting point is 00:12:05 Right. It's like the marking a point in time. Yep. So they say, knowing those two things, you actually don't need branches or tags technically, right? Like you could do everything if you just wanted to point to hash IDs all the
Starting point is 00:12:20 time. If you were feeling fairly nutty and somewhat insane, right? I don't, I don't, is it really all that insane listen i need some help if you if you wouldn't mind checking out my branch uh just or in my i'm sorry hold on let me change my vernacular here if you wouldn't mind checking out commit id uh d738125qrz and um tell me when you have that checked out you got it the first tell me i don't have to repeat that again you only have to type as much as it makes it unique that's right that is true well in my repo because it was so big i had to like say all those letters yeah so now they go they go into a couple of useful commands here that uh honestly i don't think i knew exactly how
Starting point is 00:13:03 they worked in the past they always did what i wanted them to, but that's because I always was very, I knew the situation where I wanted to do it. Right. So the first one is get reset dash dash hard, and then the commit hash. And basically what they say here is hard says to erase all the changes in the working tree, whether they were registered for a check-in or not, and reset head to the point to point to that commit hash that you put in there. Right. So that's kind of important. And outlaw, you want to elaborate on that a bit?
Starting point is 00:13:34 Well, I mean, he does make it, he does call out that, you know, the way he's doing this is dangerous, right? Because he's basically repointing head to a very specific commit.
Starting point is 00:13:47 So he might, he could have technically already made like, you know, five new commits and he's going to like undo that by going back to a very specific one. I have definitely used a variant of this where instead of specifying a, a commit ID, I'll just use head instead where like you know i'm just trying to like undo what i currently have staged or whatever or you know changed and whatnot and and it's just like an easy way to to get back into that state so i get reset hard head but um you know he in his example he's taking it a bit further. Like it's, it's a little bit more extreme.
Starting point is 00:14:26 Yeah. So that get commit hard heads that the outlaw just said is that's basically, Hey, everything that I've done since I had my last commit checked in, I just want to wipe it all out and go back to where I was the last time I committed. Right. And it, it sort of cleans everything up for you. So it too is dangerous. But you're not losing your commits.
Starting point is 00:14:44 You're not losing your commits, You're not losing your commits, but you're losing any changes that you've made that you have not committed at that point. And, and I don't think there's any undo unless your IDE stores like local histories and stuff. Right. So,
Starting point is 00:14:57 I mean, not from a get perspective. Well, well, okay. So from a get perspective, I don't even know then maybe technically, cause you could probably go back to your ref log and pull out like the things that were like blob.
Starting point is 00:15:11 Like if you had staged something, then one of the things that we learned was, you know, you would technically have a blob created. It's just, you know, it, it, cause the, when you, when you do the get ad, that's where it creates the blob. So technically that's in there. And so maybe it's leaving it there. I mean, I don't know. This is speculation on my part.
Starting point is 00:15:31 Maybe it's leaving there and you're relying on the garbage collection to later purge it because it's not referenced by anything. Because one of the other things that we learned was that like, you know, anything that's not pointed to by some part in history will eventually get purged. Right. So, you know, maybe, I not pointed to by some part in history will eventually get purged. Right. So, you know, maybe I don't know. We would.
Starting point is 00:15:49 I'm about to try it right now. OK, go ahead. OK. Yeah, I've been having some fun. So so in example, I've got a brand new repository. Right. So my if I look at my objects folder, I've got nothing. And if I create a file, a dot text.
Starting point is 00:16:04 Right. So I save it. Still nothing. I add it. Now, just like you said, now I've got an object in my objects folder. Right, which makes sense. You've got the first two letters and the rest of the items because it's there. Now, if I do a get reset hard with no head, then I would expect it to get rid of that folder.
Starting point is 00:16:25 Let's see what happens. Make sure I hit refresh. So it is still there. In the objects folder. It is still in the object folder. But if you do a get status, it doesn't show up as staged. It shouldn't even show a change there anymore, right? Because if you did get reset dash dash hard,
Starting point is 00:16:43 the file's not even there anymore. Well, yeah, but the point that I wanted to make is that this is where the dash dash hard comes into play though, right? Because if you don't do the reset, if you've staged a file and you do a reset on it without the dash dash hard, then it unstages it and and brings it back it's like oh do you know here's like a uh you know an unstaged change right right but your file is gone right jay-z but your object id is still there so the object is still there and it's
Starting point is 00:17:18 i mean it's got stuff in there and all i do is add it so what i'm going to do now is a get cat file i'm going to tell it that it's a commit. But wait a second. In your working directory... But it's not a commit. It's a blob. Right. It's a blob. But in your actual working tree, your directory, that file's not there anymore after the git reset hard, right? The file is gone, but the object is still there.
Starting point is 00:17:37 And I believe that if I could remember how to look at their... cat-t? No, that's the type. cat-file-t blob and then the commit id of or i said commit id i meant the shaw the shaw right yeah so it is not liking that so we said get yeah like i'm questioning whether the file's really there here if the you know i'm hitting refreshing code but yeah i see uh one folder under my objects, 1A, the first two letters of the item from the hash.
Starting point is 00:18:08 And I believe the content is in there, just what I had in the file. But, yeah, if I do get cat file, and there was a way to say commit. It's get cat-file blob, the word blob, and then the hash ID. Oh, no dash T? No dash T. Did I have that wrong? T is the type. The T tells you hash ID. Oh, no dash T? No dash T. T is the type. The T tells you the type. Oh, okay.
Starting point is 00:18:29 If you wanted to find out what type it is. It's definitely not going to be a commit because you haven't committed it yet. Yeah, you're right. And yeah, so there we go. So it was user error before. It is a blob, not a commit. I did get cat file blob. So it is still there.
Starting point is 00:18:42 Yeah, and so that's interesting. So I did get reset hard and the stuff is still still there. Yeah, and so that's interesting. So I did get reset hard, and the stuff is still there, even though it's not in my folder. So the new file I just created is totally gone, but the contents of the blob are there. And this is going to get cleaned up because nothing's pointing to it. Eventually. I don't know when.
Starting point is 00:18:56 Right, 90 days. It's cleaned up. Maybe, well, 90 days. Is it 90? Really? That's what I thought we recalled at the start was it was like, you know, the default was like 90 days if it wasn't pointed to by anything. Wow.
Starting point is 00:19:07 So you want to know what's really cool about this, right? Like if we took this thought exercise a little bit further, I don't know if you want to have to go do this, but that blob ID is in there. You could actually, that tree should still be there as well, right? So you could potentially. Well, the tree isn't going to be there because nothing was committed uh nothing he's only added it so this is where i was saying that like when you when you did that ref respect and i was speculating that maybe it was still sick around and then if you wanted to go back and find it because like let's say that let's say you're
Starting point is 00:19:39 now working in like a large repo right so you you know what the way that joe just got to that shaw would be impractical because you might have you know, what, the way that Joe just got to that Shaw would be impractical because you might have, you know, a whole bunch of those in there, right? Yeah. And, and so this is where like, it's definitely coming up in a future chapter, but that's where the ref log would help you. Cause you could go back through the ref log and find what was going on in, in, it would give you that id so very interesting right like you haven't totally lost your work although it's sort of just floating out there right now and it would be a bit of a pain to go get it well yeah and there's nothing to tell you
Starting point is 00:20:15 where that file was so all it is is a blob so even if i were to um say like have that committed and like um you know if i were to go and make some changes to that file and it's going to get its own separate blob, there's no way to automatically put that stuff back together. So you as a human could go in there, figure out what it's supposed to be, what you intended it for it to do and kind of put Humpty back together again. But there's no way for it to do it.
Starting point is 00:20:37 Yeah. And that goes back to what we said in that previous episode where a blob stores, no metadata, right? It's only the content and it's in its size. And then, and then the hash ID is the, is the hash of those two things. I think that's where, like, I think I'm pretty sure it was this, this book, the get from the bottom up. Uh, I don't know if we said that already, but if we hadn't, uh, we'll definitely
Starting point is 00:20:57 have some links to it, but yeah, get from the bottom up. I believe it was in this book though, where they also mentioned that like, it's really hard to like truly lose stuff and get you know and and unless you just let enough time pass that things do get garbage collected out but now i can't find the i thought i could have sworn that we read it in this book and now i'm not finding it so i don't know that's where i'll just go to the google machine and be like what is it all right so So hopefully we've drilled that in, right? Like the git reset dash dash hard. And then if you go ahead or leave it off, that's sort of getting rid of everything except your object ID still hangs around or your object hangs around in the git folder for a little while. So that's different than the next one.
Starting point is 00:21:41 The safer way to do this is git checkout and then a SHA-1 of a commit. And this is similar to the dash dash hard, except any changes in your working tree are preserved. So what this is saying is, hey, check out things from this particular commit ID. But if I've made any changes in my local directory, don't blow those away, right? And so it's sort of a safer way to get back to a previous state that you were looking at for that commit without destroying what you already had there.
Starting point is 00:22:15 You know, what's funny is Git reset is really fast, right? Like I've reset too many times and it goes really fast. I don't know how it reconstructs things so quickly because if you just watch these blobs build up, you'll see one particular file, if there's been a lot of change to it, you end up with a lot of blobs.
Starting point is 00:22:33 So I assume we'll get into kind of how it can be so efficient restoring, but if you think about if you were programming your own version control system right now today, how you would do that, that's not easy to restore to a point and to do it perfectly. Really quick. Yeah, that's going to vary based on the size of that repo, though, and how many changes you have.
Starting point is 00:22:56 But I've never had a slow git reset where I'm like, oh, it's still resetting. I can help you with that. Hold on. Just to close the loop on the garbage collection, defaults to 90 days. Okay. And I think in a previous episode, too,
Starting point is 00:23:10 I had questioned how it manages to find all the objects that aren't referenced. And our buddy RefLog comes back again to save the day because if I'm reading this correctly, it's using the RefLog to find the things that, uh, you know, that, that have expired or,
Starting point is 00:23:30 or the things that it needs to evaluate. I guess let's start, let's say it that way. Yeah, we've actually, uh, coming up in the notes later, we've got a bunch of commands that we'll talk about different ways you can refer to commits and like,
Starting point is 00:23:38 uh, operations you can perform on them. And one of those is like finding diffs between two things or finding, uh, commits with the parents and, you know, all sorts of interesting stuff. And so, yeah, I i mean there's these tools that you can use and it makes sense when you dive a little deeper and figure out what get needs to do oh totally the the commands
Starting point is 00:23:54 cleared up a lot of stuff for me and things that i've seen and stack overflows and whatnot over the years that i was like all right i'll run that i don't know what it does. Um, right. Yeah, exactly. So on this checkout though, there's a very other important difference other than, other than a get checkout, not blowing away your current working tree changes. There is one more super important thing that you have to understand about it is when you do a get reset dash dash hard, it changes head, which remember that's just an alias that points to the latest commit and whatever branch you're in, right? When you do a get checkout of a hash, it does not repoint head. So if you were basically working on something, you had things going on, and maybe you're three
Starting point is 00:24:39 commits ahead, but you wanted to get some of the things back from a couple of commits ago, you could say get checkout. And then that commit hash back then, it does not change your head to point back to that old commit ID. It leaves it where it is. Whereas a get reset does it repoints your head to whatever hash you used or, you know, so that's really important to know. So that's not something I knew before. I've done get checkouts before to pull in the latest version of a file, but I'd never actually done it to a previous commit ID like that. I want to make sure though, that like we're seeing this correctly, because if you do a get checkout of a commit, if you were to go in like cat the value of head of that file, it has a commit ID in it,
Starting point is 00:25:28 right? It, whatever commit ID you checked out. And if you, if you check out a branch, then the, and you cat the same head file, then it has the ref,
Starting point is 00:25:39 the name of whatever that branch ref is. Right. And so the branch is the one that has the, the commit ID in it at that point. So the file head is just saying like, Oh, you need to go find this other file and it'll tell you what commit ID it has in it. Right.
Starting point is 00:25:59 Yeah. I think, I think what I'm saying is if you were to do a, um, you know, find out what head was, it would still be whatever that branch's head was pointing to before you did that get checkout. Well, I guess what I wanted to say, what I wanted to clear up, though,
Starting point is 00:26:14 is it's not changing head in those two scenarios to have the commit ID. In one scenario, it's not actually changing the file head if you're on a branch. It's changing the branch, the file of the branch. Correct. And that gets confusing, but think of the branch as the name of a file
Starting point is 00:26:37 because that's the way Git's treating it. Exactly. If you're checked out to a branch and you do the git reset, then it's changing the file that is named whatever your branch is. Correct. The commit ID that it points to. But if you check out the commit ID, it's actually updating the file head.
Starting point is 00:26:56 The file named head. Yeah. Yeah. So absolutely. And I did a couple of experiments here. So just like you said, like if you check out and then it's going to update that file. But if you do the checkout, the difference between it and the reset is that both will change the head, but one won't lose any changes you've gotten when you're working directory. Oh, okay.
Starting point is 00:27:23 I missed when you said that. i don't think so if i do uh get checkout main then it changes uh the head file to say ref you know refs heads main if i do check out of a commit it's going to change that head to point to just the commit hash if i do a tag it's also going to do the commit hash one two three four five six now if i do a reset uh then uh and dash dash hard then it's going to make sure that head still points or that uh yeah the head the head doesn't change but it resets the files in your working directory correct that's what i was saying so when you do when you do a reset dash dash hard, it repoints head in your branch to whatever that commit ID was that you put in there, right? No, that's where the wording is losing me. If you do the get reset dash dash hard with the commit ID,
Starting point is 00:28:18 it's not changing the file named head. It's changing the file named what your branch is named. So listen, this is what it says directly from the paragraph okay um if i pat uh the difference here is i've changed blah blah blah if i pass dash f blah blah check out only ever changes the working tree whereas reset dash dash hard changes the current branches head to reference the specified version of the tree. Yeah, that's the file that is named the branch. Because remember, it's refs slash heads slash branch. Because if you were to go digging through your.git directory, right,
Starting point is 00:28:58 there's a file that is the name of the branch, right? Am I remembering this wrong? Yeah. Yeah, no, it's under refs head. I just said it a second ago. But so a branch, remember, head is just an alias to the latest commit in a branch.
Starting point is 00:29:11 There's two things. No, that's why I'm trying to be super clear here. There's a file named head, okay? And that file is the alias that Git uses throughout. Like it almost uses the same as an environment variable.
Starting point is 00:29:23 It's used all over the places like where you can do a get reset hard head, for example. Right. But there's also in the refs folder, there are heads and one of them is your branch. So like if you were to go poking around in that, uh,
Starting point is 00:29:39 and I'm trying to like get in there now, it's like, Oh look, refs, heads, one for master, main, whatever. Yeah.
Starting point is 00:29:45 And so then if you were to go into your.git directory into a folder called refs slash heads, you will see one per branch that you have created. And those are also files the same as the file named head, right? And in the contents of these files that are named, whatever your branch is named, it has the commit ID that currently represents the head of that branch. So when you check out a branch, the file, the head is used way too many times in this analogy, in this description, the file that is named, when you check out a branch, the file that is named head gets updated to say refs slash head slash whatever the branch name is right and then that file refs slash heads slash let's say trunk is the name of your branch right refs slash head
Starting point is 00:30:37 trunk that file named trunk gets updated with whatever the commit ID. So as you add a new commit ID, it gets, it updates that you add a third commit ID. It updates the trunk file again. And now you decide, you know what I want to do? Uh, what was his name? John said to do this,
Starting point is 00:30:55 get, uh, reset dash dash hard and specify commit ID. It's updating the file trunk and named trunk in this example, because not changing the file head, right? Yes, yes. The file named head is just simply referencing that, hey, if you want to know where to find the head, you should go point to this other file. Head is always an alias that points to whatever the branch that you're on, whatever that thing is. Except that's where it gets different because if you check out a commit or tag,
Starting point is 00:31:26 then the file head gets updated to a specific commit. Oh. That's the distinction I'm trying to make. Oh, so you're saying it no longer points to the branch. Right. The branch head. Okay. And that's where you get into a detached head state.
Starting point is 00:31:43 Yeah, and you could tell, if you actually just watch that file, like in VS Code, like, it's really great about updating, so you can try this stuff. By default, head will point to the word ref colon space and then a directory path, ref heads master by default. If you do, if you check out a commit, it just does a commit hash, like no preamble, no nothing.
Starting point is 00:32:02 But what's funny is, like, I had some fun, and, like, I actually changed, like, the paths in this, and it totally works. bit hash like no no preamble no nothing but what's funny is like i i had some fun and like i actually changed like the paths in this and it totally works like you could just like make a path like a folder anywhere you want in here with a file in it you know put a hash in there and update this head and it'll take it it's pretty because it's always pointing it's always looking at those files anytime it's doing anything right yep okay so that wasn't clear in what that paragraph said there so that's why i wanted to clear that up, because the word head is used way too many times, and it's confusing
Starting point is 00:32:32 because he's referring to the branch's head, not the file head. And where he made it, where it got extra confusing is that when you're reading this, there's this annotation where head is always in all capital letters. Right. And so you think that he's referring to the special alias in this example because he capitalized it again, but he's not. It should be lowercase in this specific example or this specific thing, which by the way, this is, we should say this is on GitHub. You want to,
Starting point is 00:33:07 you want to make a commit and, and help contribute to, uh, um, I can't pronounce his last name cause I always get it wrong. I'm going to try again. John Wigley. No,
Starting point is 00:33:18 did I get it? Tell me I was closer. That's good. Uh, vaguely. Dang it. It's always the second letter has the if it's if it's german right it's so okay that's good why would i think a w would be pronounced like a v
Starting point is 00:33:32 well well in german it's a w is a v and then you use the second letter as the as the so if it was ei it would have been vaguely but here it's it's Weigli. Because it's by E? Yeah. So it's B, Weigli. Anyways, I don't know if he's German, but that's, you know. So Alan's going to school me in proper nouns. I lived in Germany for a minute, so I don't know much about it anymore. But anyways. We should do a book on – that should be our next book on proper nouns,
Starting point is 00:34:02 how to pronounce things. There you go. All right. So that was actually really useful because, again, the page there did not make that clear. And like Outlaw said, everything on the page is referencing head in upper caps, and that is generally meant as the alias, right? Like when you're doing any git commands. File named head. Right.
Starting point is 00:34:23 All right. So good. All right. So the next part is some some simple hopefully simple concepts to grasp here if a kid if a commit has multiple parents it's a merge right um outlaw mentioned that earlier and if a commit has multiple children then it represents the ancestor of a branch so pretty pretty basic stuff and they both make sense if you've ever seen their little bubble diagrams
Starting point is 00:34:45 where they show the circles and the lines and all that. Now, can I share something that I should be embarrassed to share? But I'm going to do it anyways because that's what I do. Hey, didn't you just earlier say we don't always need to share everything? Oh. We decided to cut that part from the show. Yeah, we did cut that part. You'll appreciate this one though.
Starting point is 00:35:05 This isn't some kind of weird reference like what Joe would bring up. Sorry. But yeah, that second statement took me so long to figure out like, wait, what does he talk on it? What does he mean here? Like if a commit has multiple children,
Starting point is 00:35:21 it represents the ancestor of a branch. And I'm like, for the life of me, like, what is going on? What is he trying to describe here? And I don't know why it just wasn't clicking until eventually, I think it was like, I think I eventually gave up and went on because that was like the parent that like literally that chapter ended on on that statement or, you know, around it. And I was like, well, whatever. So I went on to the next chapter or maybe it was on the one after that. And then I'm sitting there.
Starting point is 00:35:51 It was like, oh, wait, I know what he was talking about now. And he's saying that if the commit has multiple children, it's representing the ancestor of a branch. And I was like, okay, if your main development branch is called trunk and alan creates a branch called alan and joe creates a branch called joe and i create one called michael then we are all our our and we committed at the same time we were i'm sorry let me rephrase that we created our branches at the same time off of the same commit id then that one from trunk would all have these children,
Starting point is 00:36:28 these three branches that are children of it because it's the ancestor branch that we branch from. And I'm like, I don't know why that didn't click with me like immediately because the first one did, if it had multiple parents and I'm like, Oh yeah, of course.
Starting point is 00:36:40 You know, what's funny is you got all the head stuff where that was all mixed up and it wasn't as clear as it needed to be. But this this very basic thing of parents. Yeah, I don't know why it just didn't it. It you know, I don't know. Hey, but in fairness, like again, we have the link here. It's the beauty of commits is this particular page. If you scroll down to the very bottom of that page,
Starting point is 00:37:05 they have a chart there, a graph or a picture. I don't know, um, of this whole notion. So this whole head and where things are pointing to and ancestors and children and all that kind of stuff. So it's kind of nice to be able to visualize it in terms of what these
Starting point is 00:37:20 are. So, um, definitely check that out. And you also just look at any uh git folder so uh git uh sorry vs code actually hides the git folder the dot get folder by default but you can change that i forget how i did i had to get to google just like a list of folders that i'll not include by default it's cool just to watch those things change but once you get past like
Starting point is 00:37:39 one or two files and get uh forget about it because like looking in the objects directory like oh i've had to create so many different repositories uh during these last couple episodes just because like oh yeah me too once you do one or two and you know like and then all the changes on them yeah i mean it's impossible to see what's going on so i'm constantly just creating new ones and now i have a whole git folder that i blow away from time to time and then start over again that's the way to do it yeah and you can like you you mentioned about the cleanup like you can run the garbage collection manually if you wanted to um but you definitely like run the risk of like well you know if you were in a situation where you might want to go back to something then you can't yeah here's a
Starting point is 00:38:21 tip for you by the way never delete your branches not branches. Not if you're local, not off the GitHub or GitLab. I don't like that. Yeah, I was going to say. Sorry, I was trying to trigger a lot. Yeah, no, you're definitely triggering me. Thank you for doing that. No, because, okay, well, tangent alert. Because some people might be saying like, yeah, no, I totally agree.
Starting point is 00:38:44 Don't delete them. Why would you care? And, and maybe somebody else is out there, but like here, here's a reason why you might want to care because depending on what your build automation is, that's just that many more heads that it has to go. And you know, uh, the build automation might have to go and inspect because in the case, I'm going to pick on Jenkins for a minute. Like Jenkins is awful about the way that it does it, or at least with the plugins that we were using for it, because it does it serially. So if you kept your 50,000 branches around and it's like, oh, well, let me go check these 50,000 branches. And you're like, but I just added a new one. Why don't you focus on on it i don't know about that new one yet i got i got these first
Starting point is 00:39:29 50 000 i gotta get to these my first 50 000 customers i'll come back to you so it's like if you clean up after yourself do you do something like you're like oh crap what was the name that branch that i was using the other day let me just do get branched if you've got like 50 000 in there good luck yeah but also from just a from just a compaction kind of point of view, if you have all those branches out there and you know, a lot of them might represent things that you don't merge in that you have no intention of merging in, or maybe it's like you, maybe you had all intentions of working on it, but now three years have gone by and you still haven't merged it in. But guess what?
Starting point is 00:40:07 Because it's being pointed to garbage collection is never going to get rid of it. So now you're just bloating the size of your repo. So this is holding all those objects around because there are references to them. Yeah. And for the, for most people who aren't like dealing with it on the server side,
Starting point is 00:40:21 they're gonna be like, I don't care because you're not going to have, it's not bloating it necessarily for you. You're melting the polar ice caps. Thanks. But there was another point that I was going to make, tier two, with the commits and the multiple parents, though.
Starting point is 00:40:35 Because Git does this thing called an octomerge. Because we typically just merge two commits more often than not. But you don't technically have to. You could you could merge multiple things if you wanted to. Right. I don't know that I've ever done that. So so that multiple parents thing, the thing that I wanted to call out there is that um you know it's it's not two like
Starting point is 00:41:08 it's weird that they call it parents in this book because you know obviously you know we think of parents and we're going to think of mom and dad right like we're going to think of two right but really it the point that i wanted to drive home is in git, it doesn't have to be two. It could be as many as you want it. And that's why there's the Octocat. Okay. Because it's not just doing two merges. That's why the GitHub logo is the Octocat is where I'm going with that. Oh, I didn't know that.
Starting point is 00:41:37 Because it's Octomerge. Interesting. All right. So to wrap up this particular section here, just reiterating again, Git is a collection of commits, each of which holds a tree, which reference other trees and blobs, which store data. Like, that's kind of it. Now, there's a bunch of other stuff wrapped around it, but that is how the things are stored, and that's the basics there. All the other things you can get are named concepts, but they all boil down to what we just said in the basic storage stuff.
Starting point is 00:42:10 And then I already mentioned that image on that page. Go take a look at it. It will help you understand some of that stuff. And then you'd be like, oh, yeah, ancestors. I get it. Outlaw was just silly. Parents. Grandparents.
Starting point is 00:42:23 He was just silly goose. I don't understand. Yeah. was just silly parents grandparents he was just silly goose i don't understand yeah i think actually they even show well squares are blobs so never mind uh that are triangles were the new so okay i was going to say that they show like one with a three a three-way merge but it's not no that'll have it so all right well uh let me go ahead and say before joe makes it weird and jumps in here and says this. Because look at this mom on his face. You know he was crafting something weird to say. We're like, hey, I'll tell you what.
Starting point is 00:42:52 If you give me a two-star review, I'll buy you a cup of coffee and be your friend for life. Pumpkin coffee. Yeah, pumpkin spice. No, but seriously, if you haven't already left us a review, we would greatly appreciate it. You can find some helpful links at www.net slash coding blocks. Wait, no, that's not right. I said www.net slash coding blocks. That is awesome.
Starting point is 00:43:19 Why did that sound right? We're registering it tomorrow. Somebody bought the domain www. They had to, right? It's got to exist for sure. Okay. So I'm going to try this again. Keyword coding blocks.
Starting point is 00:43:43 .net slash review. There's some helpful links there. And, you know, we've said this before, but, uh, we really do appreciate reading those. They always put a smile on our face. You know, we get, we get, uh, you know, people write in either by, by reviews. Sometimes we get them through emails. Uh, sometimes it's things that, you know, people hit us up on Twitter or in Slack or wherever, you know, whatever's convenient for them. Cause we're, we're, you know, little social butterflies. We're in a lot of places, but, uh, you know, and we hear some of these stories that people
Starting point is 00:44:14 share with us of like how, like we touched their lives in ways that like we never could have envisioned. So it really does mean a lot to us. And, uh, you know, if you've left a review, you're tired of hearing me say it really does mean a lot to us. And, and, uh, you know, if you've left a review, you're tired of hearing me say it, but we really do appreciate it. And I just wanted to like drive that point home and,
Starting point is 00:44:31 you know, um, you know, let you know that it wasn't going unnoticed. So, all right. Uh, that was not weird.
Starting point is 00:44:39 I appreciate that. That was, that was not a weird ass. See, that was good. That's what happens when Joe doesn't do it. Yeah, it's totally fine. Joe doesn't do it. It was totally fine.
Starting point is 00:44:49 Really appreciate it, y'all. He went Southern. That's good. It was almost like Mr. Mackey, I thought. Echoes on 97. WMFE. ASMR Southern. That's totally not how that guy sounds, by the way.
Starting point is 00:45:03 I don't know why. I've always been terrible at accents. Okay. Okay. Russians. Okay. Get a pie, fry, or coffee. All right, so how about we play another round of Google Feud? I like it.
Starting point is 00:45:20 All right. Let's do it. I don't know. How would they? Let's play google feud i guess would be about as close to um although steve harvey isn't the one that says uh the family feud thing so i don't know who does that but um i'm gonna i'm gonna be i'm gonna try to be as good as that although you know i'm not gonna do what was the the original guy's name for family
Starting point is 00:45:41 feud richard something oh he was really creepy, dude. Yeah. Yeah. I'm not going to appropriately grab our shoulders and stuff. Yeah. I'm not going to kiss you or anything like that. Cause that was like weird. So here I put, we're going to do it a different way though this time instead. Cause like the last one was specific to get,
Starting point is 00:45:57 but this time I'm going to do it a little bit different. So you're going to pick one of these categories. And so you guys can see it here in the show notes, but for those listening at home, the choices are culture, people, names, question,
Starting point is 00:46:11 animals, entertainment, food. I'm feeling lucky or question of the day. And by to tacos rules of engagement, I believe Joe first on picking today. Thank you. Yeah.
Starting point is 00:46:24 Yeah. I'm feeling lucky 25%. Wait. That's not how that goes. So, okay. He wins. All right. I finally won one.
Starting point is 00:46:35 All right. So, we're going with I'm feeling lucky. Here we go. Feeling lucky. Yep. So, I got to make sure it's also appropriate. All right. So the question is who was the voice of blank? And there are 10 possible choices and you will give me your choice.
Starting point is 00:46:57 And whoever gets the highest choice wins. Darth Vader. Okay. So I have Vader and Batman. So I so I'm gonna I heard Joe say Batman first so I'm gonna say Batman who was the voice of Batman oh that's not even on the top 10 I'm sorry dang Darth Vader I I feel good about this one good I feel good about this one darth vader the number two answer alan wins it who was number one uh okay then let's find out who was the voice of buzz lightly buzz like your recency binds yeah come on that is buzz buzz buzz buzz light year all right so do we get to pick one now okay yeah we can do another round but i'll just finish out Come on. That is. Buzz, buzz, buzz, buzz. Lightyear. All right.
Starting point is 00:47:45 So do I get to pick one now? Okay. Yeah, we can do another round, but I'll just finish out the number three, Fred Flintstone. Number four, Alf. I don't think that's recency bias there. No. Another one from Blast from the Past for the fifth one, Kit. Wow.
Starting point is 00:48:03 From Knight Rider. Yeah. Wow. There you go. All right. Wow. From Knight Rider. Yeah. Wow. There you go. All right. Man. No Batman. Come on.
Starting point is 00:48:08 I immediately thought of Batman, the animated series, which, yeah, not a great choice. But Mark Hamill, by the way. Yeah. Anyway. Oh, wow. Scotty in Strange New Worlds. Wow. The Modern Civil Rights Movement.
Starting point is 00:48:22 That's a random one. Okay. Gizmo, Winnie the Pooh, and Charlie on Charlie's Angels. Like one of those got super serious. The rest of them are like all light and fun, and one of them was like super serious. So let's try the next round. All right. Let's do.
Starting point is 00:48:40 Oh, yeah. I forgot. You were going to pick a category. Let's do culture. Culture. Okay. I'm going to pick a category. Let's do culture. Culture. Okay. I'm out. I'm out.
Starting point is 00:48:50 That's hilarious. Culture. You hold your pinky up when you drink the martini. That's culture, right? Well, let me... Pumpkin spice. Okay. We'll try this one. I don't know where Google's
Starting point is 00:49:08 going to take me on it, but hats for like a hat like you put on your head. Hats for baseball. Baseball. Church. Church.
Starting point is 00:49:23 Church. Yeah, man. People wear some interesting hats to church. I got a – baseball was not on the list, and I'm going to type it again just to make sure I didn't mistype it because how could baseball not be on there? And it wasn't. Church. Wow. I thought that was number one, Alan.
Starting point is 00:49:41 I will give you credit. Yeah, same. Hats for church not on there. I will give you credit. Hats for church. Not on there. Imagine. Kentucky Derby. Yeah, these weren't even really that good. Oh, hats for big heads. That's one I Google all the time. Yep. Men, women,
Starting point is 00:50:00 big heads, cell, dogs, cats, kids. Yeah, they were all like very, you know, they weren't. Yeah, they were all very generic. Dogs? They weren't funny. That's for dogs? Sure. Like for Halloween?
Starting point is 00:50:10 Come on. What? Look, Joe's about to mess his dogs up. Yeah, these are super cute. Oh, my gosh. Oh, my gosh. They're so cute. I can't take it.
Starting point is 00:50:25 Well, you wanted to get back into Git then? All right, let's get back into Git. Git it. All right, this is where things get... Hairy. Yeah, I mean, so I don't think anything was going to be any hairier than that head, head, head thing was. Yeah, the head of the head of the head point to the head and updating the head.
Starting point is 00:50:47 I will. I do want to prefix this section though, because this section is really like in your podcast player, most podcast players, you can, you can see the show notes that we published along with the episodes. You can follow along with what we're saying. If not,
Starting point is 00:51:02 you can go to www.codingblocks.net slash episode 192. You can follow the show notes, or if you're reading the Git from the bottom up book, you can follow along in this chapter that's called a Git, I'm sorry, a commit by any other name, because the point is there are a lot of examples that the author gives here that will say without like you know harping on the syntax of it so much i think would be a fair way to say that because it it can get hairy quick yeah but the key here is is knowing that there are these things that you can do and understanding that when you see them, what they're doing, it will actually help you out a
Starting point is 00:51:50 lot. So we'll cover a few things real quick. So, um, they already said the key to really understand get in general is just understanding the commit topologies, right? Like we've been talking about that quite a bit. Um, and then they say that learning to name your commits is sort of the way that you can really get good with using Git. So there's a few things. Right. The branch name. This is the name of a branch is an alias to the to in Git, like if you do all caps. Tag name, they said, is similar to the name that points to a specific commit. Difference is the tag can't change the commit ID, right? It doesn't move. It doesn't change.
Starting point is 00:52:38 Head is the currently checked out commit. It's whatever the latest is in a branch that you're on. Um, now this is, this is where some of the technicalities start coming in. So your, your hash IDs, their Shaw one hashes of things that they're 40 characters long. You can always check out or get to one of those things by just, you know, get checkout and then paste in that, that hash, the entire 40 characters. You can also, and this is what Joe said earlier is you can also check it out by using a much shorter version, like six or seven characters, whatever is enough to make that hash unique with those first several characters, right? It might be four. If you don't have very many commits on
Starting point is 00:53:22 your system, it might be six, seven, eight, nine, whatever. But you can do it with the shorter version. If you just created your commit, you could just do it with one. If you just created your repo and only had one commit. One character. Yeah, you totally could. Isn't that crazy, though, to think that on a large repo that six to seven characters are generally enough? Shows you how random it is, right?
Starting point is 00:53:43 Well, yeah. I mean, I still thought about that i was like well okay seven if you went with seven characters then you basically have uh what 36 possible you know uh 26 choices per you know because because there's no the uppercase doesn't matter here so yeah yeah there is a minimum by the way You can't actually do just one. Oh, you can't? It won't let you? Yeah, I thought earlier when I was trying to do that, I was trying to do that where I was just typing 1A and it wasn't enough. It looks like four is the minimum.
Starting point is 00:54:16 Okay. So they force it on you. Yeah, I don't know why, but I tried one, two, three, and then four. So there's another pull request opportunity for the book then. Because the book does say you only need as many digits of a hash ID as are needed for a unique reference within the repository. Hey, so Jay-Z, real quick. If I remember right, when we were looking in those git folders, it was like a couple of characters and then a dot and then some odd. How many characters are before the dot? Is it just two? Oh, it's it's a slash yeah two for the folder so like i'm looking at it
Starting point is 00:54:49 it can be hash for example it's d8488 and then a bunch of stuff d doesn't work eight doesn't work that makes that was the folder do you think four would be enough things it's like okay fine it's the folder in the first nope but d48 uh sorry 8, sorry D8 4 8 is enough. Okay. Interesting. So it wasn't the slash. I was wondering if it might have had to do with how it was storing things. Yeah. That's what I thought too. I don't know what it is. Okay. So you're saying that
Starting point is 00:55:15 it needed 3 or 4? 4 minimum for me to check out on my version of Git, whatever. Maybe that's changed. I don't know. Oh, that's a good call it too i wonder which version i get you're using all right so this this next one this is where things start getting interesting this is where i used to see stuff on stack overflow and i was like i don't even know what this is but i'll paste it and hopefully magic will work right so if you see if you see where it's got the name and then a carrot afterwards, the carrot tells get to go to the parent of the provided commit.
Starting point is 00:55:52 So, you know, go up one, right? Up one commit from the one that you referenced. If you do, you can start stacking carrots. So you could have name, carrot, carrot. You could have name, carrot, carrot, carrot, whatever. And that's literally just, Hey, go up to the next parent. Now here's something that's really interesting that you have to know about in outlaw called out earlier. If you have multiple parents, right? It doesn't just have to be two. You could have three, you could have four, you know, like he said, there's this Octo merge thing. If you say go up to the parent, it's going to go up to the first parent in the list.
Starting point is 00:56:32 So if you do name carrot, it's going to go to the first one. If you do name carrot, carrot, it's going to go to the first parent, then that parent, the first parent in the chain. So pretty interesting. Outlaw, you want to take the next one or Jizzy? Well, I was just going to say that if you had multiple parents, then you can specify in the carrot, because to build on what your example was,
Starting point is 00:56:57 the name of it, carrot, and then the number of the parent. So like, you know, in case that you only have typically two, and this is where like get also doesn't follow everything else in computer science, right? Because it starts counting from one, one. Yeah. It's not zero indices. So like what outlaw was just saying is you'd have name carrot too. That'd say, Hey, that doesn't mean go up to parents. That means go to my, in my parent list, go to the second parent that's up one level for me. So name carrot two would be that if you did name carrot three, that would say, Hey, go to the third parent that's just above me. So pretty interesting. The next one experiments here. Yeah like some of these things that like wrote
Starting point is 00:57:46 point to one or the parent or whatever like what if you don't have a parent uh i guess but if there's an error like what i expected you yeah that's that's what i mean you think same as like we saw if you emitted a repo and you do a get log right like it offset through through the error too yeah nothing there you know, the number of those, this is somewhat off topic, but can you think of an example where those number of parents would come in to play that you might need to know and care? Have you ever been in a situation where? I don't think so.
Starting point is 00:58:21 Let me rephrase the question. What's a situation, a Git situation, not necessarily specific to what we were talking about here with names, named commits, but what's a situation where there are multiple parents and you care to know which one of those you want to use? All right. I think so.
Starting point is 00:58:47 I would have a commit that's got, say, two or more parents, and I want to choose between them. If you're doing conflict resolution, maybe? I don't know. Joe, you got a guess? Still thinking about it. So I've committed. Same commit to two you guys are going to kick yourself when you hear my example because you're like oh i've definitely done this
Starting point is 00:59:13 or at least that's you know i mean both of your examples aren't the ones i'm thinking of so yeah i don't know cherry pick well i guess when i create a new branch no i don't know a cherry pick so if you want to cherry pick a merge you can't you can't cherry pick a merge commit so instead what you have to do is you can give it the merge commit id but then you have to tell it which one is the main line to pick oh okay yeah yeah. Yeah, good call. And so in that case, you know, you're going to see all of the parents are going to be listed in the merge commit
Starting point is 00:59:52 and they're going to be numbered from one and you're going to say like, you know, this is mainline. And it's weird too how it does that because it picks it by number instead of, you would think that it would make more sense to use the commit ID and say like dash M and then the first seven of the
Starting point is 01:00:11 commit SHA or of the SHA and instead it doesn't. It's like one, two, three and you're like, oh, I want number four as my main line and you do dash M4. So that's weird. Interesting. Alright, So this next one up, we talked about if you had the name and then carrot, carrot, you can accomplish the same thing with shorter things. If you don't want to start typing in 20 carrots, if you're trying to go up 20 parents,
Starting point is 01:00:39 you can do name Tilde and then the number of ancestries you want to go back. Right. So if you did name Tilde 10, it would go up to, you know, the 10th, uh, parent up the chain.
Starting point is 01:00:55 And again, this is always going to pick the first and, and the parent lineages it's going up. What is that? You know, I've not been able to get named to work uh it's because here the because here name is like the commit so so name is either going to be like head or the first seven of your shawl like that so that's what the author is using
Starting point is 01:01:21 to signify name here like he's using name generically. Right. Yeah. So I do, I tried like get log, uh, then there's a couple of numbers might commit. And then the tilde I've seen,
Starting point is 01:01:32 or not, not till the carrot. I've seen like head carrot. I think you can do head. I think you can do the branch name as well. Yeah. You could do the branch name, the tag name,
Starting point is 01:01:41 the head or the commit ID. Cause that's where it starts off. Like the, you know, he, the author starts off saying tag name, the head, or the commit ID. Because that's where it starts off. The author starts off saying, if commits are the key, because he's talking about how to understand Git, right? If commits are the key, how you name commits is the doorway to mastery, is what he says. And so you think about these commands, like these different ways that you can reference commits.
Starting point is 01:02:01 Like, oh, I'm on whatever my head is. I want to go, I want to know what it was i want to see a file or a diff or whatever from five commits ago and it's like well how can i get to that right then that's where he's saying the mastery of this thing comes into play where you could do like uh name tilde five to see the commit, you know, to see what was five commits ago. If you wanted to like look at a file from five commits ago or look at, you know, the log or whatever,
Starting point is 01:02:32 because like, let's take Jay-Z for example, right? Like let's pick on Jay-Z for a minute. We never do that, but you know, cause like Jay-Z is like a get, a get commit fool,
Starting point is 01:02:41 right? He's like committing all the time, right? Bang, bang, bang, bang, bang,
Starting point is 01:02:44 commit, commit, commit, commit, commit, commit. And then he's like, Hey, you know what? I know I did some, I know three commits ago, this was working. Right. And so this is where like, you know, you might want to do that diff against it. And he's the author saying like, you know, sure. You could go and do a git log and get that Shaw and look at the file that way, if you wanted to. But this is where he's saying the mastery of it would be like oh now now i can like elevate my my level by not referencing it uh by that commit i could do head totally three to get to something three commits go to like diff it or whatever right so i figured i was doing wrong by the way um in my various experiments i didn't realize that i had uh chopped all my
Starting point is 01:03:25 commits down to just one so i was trying to do the parent of my first commit and you had nothing yes yeah so that no matter what i tried the uh the carrot didn't work because i only had one commit and that commit didn't have a parent so it was another case where it was uh it was just an error so the command was valid but i got an error which is i'm totally fine and you know right it's just kind of funny like i'm so you still like modern software, you know, kind of like hold my hand a little bit and be like, now, now you don't have a parent. You can't do that. Right.
Starting point is 01:03:51 Now, this next one was pretty cool, though, because we build on this concept. We've established that the way the author is using the letters in A-M-E, you know, name here could mean multiple things, right? So like it could mean name Tildy 10, it could mean head, it could mean, uh, the branch name, whatever. And he says like, you could also append colon and the path to some file there, right? Which is helpful. Again, going back to the diff example that I was describing a minute ago if you wanted to diff something you know you could specify the file you could compare like you know two different uh in the in the book here he gives the example of like if i wanted to see what does my file look like from one commit ago versus two commits ago, then he does this get diff using head Tildy one colon file name,
Starting point is 01:04:47 head Tildy two. I'm sorry. I'm saying Tildy. Um, in his example, he's not going against the commits from one and two commits ago. He's going against the, uh,
Starting point is 01:04:57 no, you're commits of them, of them, the parents, the parents. Yeah. Two different parents. Yeah.
Starting point is 01:05:01 Cause he's doing carrot one carrot and carrot two. Right. But pointing to the same file name so so the point is that like you know we we've generically defined the name what name can be and now i'm saying you can tack on colon path to something to that as another way of like getting even more granular about what you're trying to go after. And that name portion of it can be all those crazy things that we talked about for where it could be named carrot, named Tilde, named, you know, whatever. So you can reference very specific things to get to those paths you want. So it's really powerful, right? And this
Starting point is 01:05:42 is the kind of stuff that I'm talking about that I've seen on stack overflow. And I look at it and I go, I have no idea what that's doing, but all right, fine, let's do it. All right. I think we're all going to have a better understanding of what we're doing now after reading through this,
Starting point is 01:05:53 this book. I mean, I got to say like, I really appreciate that John put this together. Yeah, this is, this is pretty, I say his first name only like,
Starting point is 01:06:00 like he and our best friends, like we get together, you know, Mr. Weakly. Yeah. Um, all right. Mr. Wiggly. Yeah. All right. So the next one is name, carrot, open curly, the word tree, close curly.
Starting point is 01:06:13 So this one's kind of interesting. You could probably imply or infer what it is. Instead of referencing the commit, you can actually reference the tree held by the commit if you do this command, I can't think of a reason outside of software that I'd want to do this. You know, like if I was writing get programs, but maybe there's a reason. Um, but pretty interesting. You can get straight to the tree object without some of the other, other commands that we had in the previous episodes. Yeah. I mean, I did, I did a show.
Starting point is 01:06:45 I did a get show head carrot curly braces tree and it showed me the content that I had committed there. Interesting. At least in this example, repo, I don't have a lot going on in here. I've made, like Joe, I've made so many different repos to like follow along with some of the stuff, some of the examples in there. Yeah.
Starting point is 01:07:12 That, you know, I have a few of them. But yeah, I had a decent amount of stuff in this one. So yeah. And he had a, so the author went through and gave like a bunch of different list of things here that we're talking about. And like some of those things are fine for doing it like a checkout or like a reset and some are appropriate for like logs and sometimes the things you would do don't make sense for one of those like uh you know doing a like you can do a range for example if you did like name one dot dot name two uh that's not something you do on a checkout right no but you would on a log like you were just saying you might even do it with a with maybe
Starting point is 01:07:45 a diff possibly these are a little bit confusing to me the next two yeah so i think i get them but but they're they both act very different but they're very close in in their syntax right so syntax, right? So name one dot dot name two that Jay-Z just said, it gets the range of commits that are reachable from name two, so the second parameter of this statement, all the way back to, but not including the name one commit. So it's just giving you a range of all those commits. As long as it can trace itself back to the first one, so name one, then it's going to give you a list of all the commits after name one. Right?
Starting point is 01:08:42 Yeah, I think I've seen this before. I think it's like when you do a rebase I, sometimes it'll do the little dot dots i've seen that syntax before but i never really understood what it meant you like get rebase dash i head tilde three you know say like i want to go back and look at three um but of course i don't have three commits in this one i could have sworn that where I've used that this was in regards to a diff, but he refers to it in the next one, in the next one with the triple dot. Yeah. So the triple dot is a little more interesting. So the previous one was like,
Starting point is 01:09:19 Hey, show me everything before name two, all the way back to name one, right? Like if you're doing a get log type thing in the second one, you have name one, triple dot name two. So here's where they say, like, if you're doing something like a log and you do this, it's going to give you all the unique commits that are referenced by name one or name two. So, so it's almost like a, a union of those things, right? Like if you're thinking of a SQL statement or something like where you're doing a union, it's going to pull out the dupes. That's kind of what this is doing.
Starting point is 01:09:58 Now it says for commands like a diff, the range is between name two and then the common ancestor of name one and name two. So if you're going to use these two that we're just talking about right here, the name one dot dot name two and the name one dot dot dot name two name two triple dot. Yeah. Yeah. Then you're you really going to want to understand what you're seeing, what what's pulling out of this, right? Because it could really impact your assumptions on on what's happening yeah and uh so i just did the uh rebase dash i you know head trick and uh so what it does show you is it does use the dot dot syntax which now i know how to read so i know it's going from the committed shows here dot dot the one here so it's back to the the one the number i specify but does not
Starting point is 01:10:45 include it uh and then if i rebase of like squash these two together it's telling me that's going to replay those onto and it gives me another hash here so the dot dot without anything after it implies head right so it was basically going from your latest commit all the way back to whatever you specified at the beginning of those dot dots, right? You did, I think you said head tilde 3 or something. Yeah, so let me try here. So I do rebase instead of head tilde 3. Let me try doing that, the dot dots. Oh, it doesn't like it. Let's see.
Starting point is 01:11:18 upstream. Yeah, well, he's doing that. Like the next two kind of drive the point home of what jay-z is saying right now is if you do like they said master here as the name of a branch if they did master dot dot that's the equivalent to master dot dot head meaning hey show me all the changes that happened since the last rebase or merge is is essentially what that one's doing and that's why he uses that one or wait, that's the wrong one.
Starting point is 01:11:45 No. When you're looking at the changes that were made in a branch since that point in time, the next one, the dot dot master, is essentially head at the beginning and then dot dot master. It's equivalent. It's useful for seeing changes since the last rebase or merge. So go ahead. Well, I'm'm sorry i didn't mean to cut you off no you're good in either way though head is going to be implied if you don't
Starting point is 01:12:11 specify one in that scenario because i was curious since he since the author called it out in his example of branch colon i'm sorry branch dot dot he called out that, you know, it was the equivalent of including head. And I was like, well, why didn't he include that same kind of, you know, call out on dot dot branch name? And at least in my example, I did a git diff where I was in some other branch and compared it to whatever the trunk branch was. And I did, you know, get diff trunk dot dot versus get diff dot dot trunk. And it literally showed me the same data.
Starting point is 01:12:52 Just, uh, you know, things were flipped around, you know, like what, in the difference being of like whether or not I've added or removed something,
Starting point is 01:13:00 you know, like, or, or if something was an addition to, I should say not add or remove, but if something was an addition to i should say not add or remove but if something was an addition versus something was a uh not really a subtraction but you know a missing you know kind of thing yeah so yeah so uh i'm still playing with the rebase here sorry uh so you know well rebase never is coming up in the next in the next chapter, by the way.
Starting point is 01:13:25 Yeah, but just in reference to like kind of how you can refer to different different commits in different ways. And the things we're discussing here. So like I've just always been in the habit of doing like get rebase dash I. And I would do like head till the I don't know, maybe 10. I would just kind of pick a number that seemed out right. And it never really occurred to me like that all the different ways I could refer to ranges here i was just like this is how you do rebases so now i know i can just pick a commit that i know is you know when i go back to you i can just pass that and it'll figure it out i'll do the dot dot head uh implicitly i can also just type in the name of a branch so if i want to
Starting point is 01:13:59 basically rebase on top of another branch which is the way i would have said that before now i'm going to share what it's doing if i do get rebase dash i and then the name of another branch, which is the way I would have said that before. Now I understand what it's doing. If I do get rebase dash I and then the name of another branch, what it's doing is saying, hey, rebase these changes going back to the commit this point to by the head of the branch I just typed. So all the things,
Starting point is 01:14:15 it's just saying the same thing. You know, like it makes me understand this from like a more of a programmatic level where all I'm doing is just passing a range of commits. And there's a bunch of different ways you can do that. And now I feel like my vocabulary with git has increased like at least double i'm
Starting point is 01:14:29 definitely gonna scrutinize your pull request a little bit more now that i know you just rebase on some randomly chosen so i'm doing interactive so i'm basically like i've got about three or four of these that i want to squash together so let me just pick 10 and i'll go and do my three or four and that's fine that's so crazy yeah well i mean what else like what if i gotta look at the log no oh dude yeah i'm gonna scrutinize yours too but then you want like you want to see a little bit around your stuff you know you don't want to just you like that you know see a little bit of before and after. You need a little buffer. Huh. I'm surprised he doesn't do like Tilt-E-30.
Starting point is 01:15:10 I mean, he commits like every five minutes or so, right? I think he's got a lot of commit. Not at work. At home, I'm switching from the couch. That's another story. I can't wait until we get to the rebate section now because it was... It's good. I will just go ahead and say the author makes a very strong opinion on why you should rebase. But he's also I appreciated how careful he was in calling out why you want to be careful to not use the situations in which you want to
Starting point is 01:15:46 be careful to not use it as we've called out in past episodes as well. So I really appreciated that. Like I thought he did a great job of walking that line of it. So, all right. So the next few, there's only actually a handful left here. The next one is dash sense, like S I N C E equals, and then in quotes two weeks ago. So it makes sense, right? Like this is going to say, Hey, show me everything that's happened since that period of time. Now I don't know what all the syntax here is. I didn't realize it was so English, but that's kind of cool. Yeah. I mean, like you can do dash sense, you know, two weeks ago or dash until two weeks, you know, one week ago or whatever. So like, again, you know, think about if you wanted to do a git diff of something or you want to like look at the log or something.
Starting point is 01:16:37 So I don't know, though, like how I've known I've known that git had this. I don't know that I've ever in my life thought, Oh, you know what? Oh, this is, I want to use that now. Now somebody else might have like a great example of like when they would want to use it, you know, like, Hey, I was on vacation and things were fine. So what changed since I've been on vacation, you know, or whatever. And then you would like know the timeframe, but I I've just always used the IDs instead of some arbitrary, but you know, time, especially when you're like, not including like clock time, you know,
Starting point is 01:17:15 and you're just using like something super fuzzy relative. Right. Yeah. That's relative like two weeks ago. Cause it's like, well, what is two weeks ago for you mean? Because like, what if like alan threw in a commit that was like you know 40 seconds before that two weeks ago cut off and now i don't see his commit as part of whatever that get operation is that i'm doing right then you change your search that's why three weeks ago yeah that's what joe would do he rebased minus i three weeks ago that's right right. I actually have an idea, though.
Starting point is 01:17:46 You said, when would you do this? I think it would actually be in conjunction with this next one, right? So I think I did something about two or three weeks ago. I can't remember what it was. I don't want to grep the entire commit log. So you could do dash grep equal and then put a pattern in. So if you did that in conjunction with your timeframe, I think that makes sense, right?
Starting point is 01:18:10 Maybe, yeah. Because I've definitely done things where I'm like, well, I know I did that like last month, and I don't really want to have to try and go find the pull request where this happened or whatever, then this would be a good way of putting in dash grep equal and then put your regex pattern. And then you're limiting it to a time frame instead of going over all your commit log.
Starting point is 01:18:31 Yeah, I remember there was like a get commit thing that I shared like way back early days of the show, like year one. And I remember some people were like, well, what would be a situation that you would use that? And I shared it, but now I was like, I've gone back and I've thought about that and I'm like, man, I would never go back. I would never look at it that way. I would never use that. I don't know what I was thinking about like 10 years ago. It's on the record now. Yeah.
Starting point is 01:19:05 Well, I guess I got to use it then. Yep. So the last few, the last few we have here are dash author equals, and then you put in the regex pattern. Um, and then dash commit or equal pattern.
Starting point is 01:19:18 And Jay-Z, you want to talk about those? Yeah. It's just a weird one. Cause the first thing I was like, okay, fine. Let's see what the,
Starting point is 01:19:24 the author is. Okay, fine. Let's see, uh, what the first thing I was like, okay, fine, let's see what the author is. Okay, fine, let's see what the committer is. Like, wait, isn't that the same thing? And the deal is if you're working locally in almost all cases nowadays, those are going to be the same where your committer and author are. But the cases where you're doing things over email, like someone sends you a patch, then that might be a case where the committer is different than the author. And so those are technically two fields yeah that one was odd yeah so someone literally like and this is like pretty specific to kind of like old linux workflows and stuff or like
Starting point is 01:19:55 some other email as a patch and you're like okay i like what you did here i'm going to take it and so i'm going to commit it but I'm going to mark you as the author. Yep. And then the last one was dash no dash merges. And that would just return you only commits that have a single parent. So you don't have the multiple parent scenario. And that was it for the commands that they shared on this one. But I think those are all really useful to understand. Like if you see that syntax now, it shouldn't make your mind explode and just be like, oh, whatever. You know, I'm going to get rebase dash head tilde five and see what happens. So think about this. So, you know, when I like figure out how to cherry pick stuff, for example, for one branch to another, like a way I used to might have done it, but basically to, you know, look at my commits, look for the ones with my, you know, branch name or ticket name or whatever the comments and kind
Starting point is 01:20:48 of gather those up and, and take them. But now I know a more precise way of doing that is now I could say, okay, uh, I guess get log. I'm still unsure about this part. So git log and then i can pass um what i want to do here the name of the other branch and then i'll have an implicit head so it'll give me all the commits that are in my current branch that are past the head of the other branch i'm looking at dash dash no merges so if i pulled in another branch or whatever i don't worry about that and that's going to give me a list of all the single commits that i should consider cherry picking over into the branch i'm looking at sounds about right yeah it's pretty cool okay so i apologize i uh went off into like you know searching for it because i wanted to go back and find it so i didn't follow all your example there but uh i found the the thing that i was talking about
Starting point is 01:21:51 the the tip that i was talking about and you know going back and look at it i'm like okay that is that is different than what they're talking about here and i went back and reread what we were talking about here with the grip pattern on you know from what the author talking about here with the grep pattern on, you know, from what the author was saying here. So, cause he's saying like, Hey, you could do like a dash grep equals some pattern to refer to all the commits whose commit message matches that pattern. Right. Which I would have immediately been like, well, why wouldn't I just do like a get log pipe that to grep, grep that out,
Starting point is 01:22:26 awk the first IDs. But by doing this dash grep equal pattern, you can avoid that. The commit that I had, or the, I'm sorry, not the commit. Well, I did commit to this in 2015. But the tip that I had from 2015 was not if you knew what your commit message was but what your content was
Starting point is 01:22:48 how do you go back and find that then if you just knew the content um so like i don't know maybe i had some special variable called foobar and i knew that that thing existed at some point in time and it's since been removed like you know what what was it and and that might be a silly example but like if you wanted to go back and find that content you know like but you know like a part of it so that's still useful yeah it's still used i still you know yeah that one's okay that was from episode two no uh sorry i put i put i'll have a link in the show notes for this but yeah it goes back to episode 31 from 2015 it's been a minute yeah you were what 14 because you're 21 now right something like that yes thank you thank you that's you know what if you're back
Starting point is 01:23:40 on the christmas card list that's right if you go back, the outlaw sounded like this. So today's get tipped. That's right. That's right. Thank you. Yeah. It's been a minute, but yeah.
Starting point is 01:23:53 So, uh, okay. So we, we, we wrapped up while I was doing the search. So then, uh, yeah,
Starting point is 01:23:59 we'll have linked to this book. Um, dang it. I forgot it already. Second letter. There you go. Oh man, nailed it. The show's over.
Starting point is 01:24:13 Let's just stop it from right there. I got 12 tips of the week. We can't do that now. I guess we'll head into Alan's favorite portion of the show. It's the tip of the week. Alright. Looks like I'm going first. I think I always go first. we'll head into Alan's favorite portion of the show. It's the tip of the week. All right. And it looks like I'm going first. I think I always go first.
Starting point is 01:24:28 So, uh, Simon from the, all the cod, uh, code podcast, which we've mentioned a few times. Uh, Simon's great.
Starting point is 01:24:35 Uh, he, uh, recommended to me super base. I was looking for a way, basically a small project I wanted to work on. And I wanted this, a simple,
Starting point is 01:24:43 uh, JavaScript solution that I could do where I could basically just work on the front end and be able to fetch simple data out of a database without having like a middle tier. Like I didn't want to have to go and create a new kind of C sharp or Java or Django service or something and get that hosted and get it updated when all I'm doing is just like simple crud into and out of the database. So I was looking at some of the things that are out there, like Firebase is the one that I probably had come to mind immediately. So I asked for help in our JavaScript channel in the Slack and got some great tips there. Also, Solomist, which I mentioned before, is recommended to Soro,
Starting point is 01:25:19 which is something I also really love, GraphQL. But the one I ended up going with and liking the best ended up being Supabase, which I got from Simon. And what Supabase is, is it's an open source alternative to Firebase that's based on Postgres instead of a NoSQL database. You got me. Yeah, it's really nice.
Starting point is 01:25:38 You can host it yourself, so you can actually run it in a container and kind of work locally or use their service, which actually has a really nice path to get to up to production so they'll actually you can click one button and it'll spin up uh postgres in heroku on the free tier i just read today that the free tier is going away so you know who knows what's going to happen that maybe it'll work something else out but it was
Starting point is 01:26:01 a great experience for free the weekend where i was basically able to get something like up and hosted and in addition to actually you know just making a really nice experience around you know getting something running on heroku uh they uh provided javascript library libraries for interacting with my database you handle all your r back and stuff through creating policies on postgres which you know when you're thinking of like if you're doing a very large huge project that's you know got a lot of really specific business logic and rules and stuff, that's probably sounding pretty scary to you. But if you just need to do a simple CRUD app, that's awesome. Because I was able to go in there and say, hey, reads for these five tables, you can do whatever you want.
Starting point is 01:26:41 Authenticated users can update, insert, and delete those tables. And they can also read data in these other tables i was able to do that in like two minutes i actually had a little wizard that would create it for you that was just postgres um policies at the end of the day so you can actually just manage it you know however you normally do your postgres stuff and so that was really great and then there's also client libraries for querying data so i was able to just in javascript be able to say you know know, it's basically a DSL. It's like select this data from this table, join that table, where this, order by that. And it read pretty close to a query.
Starting point is 01:27:15 Really good experience and the docs were all really great. And it had a really nice integration with like authorization. So you're able to do like Auth0 or Google or even username and password.'ve got a database there so they set all that up for you and it's just a really great user experience so if you're looking at doing a small project super base will get you most of the way there i did not find a way through super base.com to actually host the front end so i ended up doing that through netlify which you know i love netlify that was really great so that you know took all two seconds i had like a website set up with a custom subdomain on netlify.com with ssl set up and now whenever i commit to main it deploys to uh it deploys to netlify and i've got a database and no middle tier that there's no
Starting point is 01:28:03 middle tier that i'm managing which is nice that they if you look at the source code it's all just done through serverless stuff so they've got a really nice free tier as we've talked about before um those serverless solutions can be really cheap so as long as you're under like a you know it's like 10 billion requests per month whatever then there's a free tier for that. Otherwise, I think the first paid tier is $25 a month, which gives you to like, you know, 2 billion requests, whatever. Still not terrible.
Starting point is 01:28:30 No, not at all. Totally for it. It's crazy to me that you can do this in like two hours. You can go through and set up Postgres database serverless server side stuff. So you can just query from a front end publish for free and like somehow you don't spend a dime and you've got like a website, side stuff so you can just query from a front end publish for free and like somehow you don't spend
Starting point is 01:28:45 a dime and you've got like a website a web app but what kind of game are you writing that you were going to use a database no not a game just different project like a little crowd i know i know and it's sponsored by nicki minaj so that's right Bass. I have actually no clue to that. Oh, Super Bass. Oh, nice. Yeah. I got a cultural reference. How about that? Yeah.
Starting point is 01:29:11 All right. So, I also have a tip from Mr. Simon Barker. Apparently, he had lots of good stuff to share recently. So, we were chatting the other day on Slack, which, by the way, there's another tip. If you are not part of our Slack group, you should go join it because there's super awesome people in there like Simon and Sean and Lars, all the people that I'm going to reference here. So this one is a thing called
Starting point is 01:29:33 Obsidian. So I've got a link here. It's obsidian.md and it's pretty cool. So what it allows you to do, man, it's like, it's like this tool that you can create files on your system and they're all marked down. You make a bunch of markdown things so that you have notes or whatever. And this sort of organizes it. And it's not an IDE and a UI that allows you to look at your things. And it'll even create like this map, this graph of all your connected documents. So you can link between them. You can see how things are together. Like it's like a really nice way to organize your thoughts.
Starting point is 01:30:17 And because it's yours, you can store this wherever you want. Like if you want to put it in the cloud, you could. All you have to have is this Obsidian client and installed on whatever it you've, you can get it on iOS and get it on Android. You can get it on windows, Mac, um, Linux, uh, they have Linux snap and Linux flat pack, and they've even got more platforms. So you just need this, this gooey client wherever you're going to look at this content and you can look at all your thoughts laid out in like this really cool way. So he's been playing with that.
Starting point is 01:30:51 Um, looked really cool. So he mentioned that the other day, go check it out. I think I'm going to actually look at this one. This, this looks pretty neat. The next one. So that led Sean Martin to saying, Hey, saying, hey, this reminds me of my maps. I really like my maps. And if you've never used those tools, I love my map tools.
Starting point is 01:31:11 I like the way that it lays out things visually to show how ideas are connected. I've just always loved it. And it reminds me of things in college or when they told you like the best way to study with notes was to sort of create these mind maps on papers because it paints a picture in your head better that sticks. At any rate, this one is mindnode.com. I would go check that one out. It's also very cool. I don't know if this one's free. It's on Apple and Android, and it looks like it might be on other platforms as well. So at any rate, check that one out.
Starting point is 01:31:48 And then the last one, Lars mentioned this in regards to obsidian, because he said this reminded him of this other tool, and it's called InkDrop. So InkDrop.app, this one is interesting because while it is similar to what that obsidian is, this one's more for developers. And what's interesting about it is you do things in Markdown, very, very similar to what was in obsidian. But what's cool is you can create like task lists and whatnot.
Starting point is 01:32:20 And this, this GUI allows you to organize things and sort of like check off things as you go with this. Um, I haven't dug into this one super deep, but it looks like it's got a lot of very cool features and it's very developer oriented. So, um, things to help you as a developer do things. So, uh, three really cool tools that I recommend going and checking out. So thank you to all three of you guys for dropping those in the chat the other day. Awesome, awesome, awesome. You know what, Joe?
Starting point is 01:32:56 Just because, you know, don't feel like you're all special because you're over there making stuff in your free time because I also make stuff in my free time too. Oh, yeah, Tom? Yeah. I made a belt out of watches once it was time to do it no but it did turn out to be a waste of time oh that's very nice um okay so how about this one we're talking about git and have you ever had this experience happen to you where you set up your new environment or like WSL instances where it happened to bite me? And you like all like certain commands like get log, get commit, whatever.
Starting point is 01:33:35 Whenever you do it, it like brings up, you know, full screen like you just lost all your terminal space for it to see the log. And then and then it's like, do you want to quit? And you quit it and you get out to get out of it. And now you can't see what that thing was anymore. Right. Yes. Super annoying. And it's actually not necessarily like a get thing exactly, except the pager that Git uses for it. So I'll have two commands in here, one where you can
Starting point is 01:34:08 change your Git config to replace the pager. Or what I did, which impacts more than just Git, is if you change the variables that are the export less. You'll export a environment variable called less, and you're going to default some, uh, variables, lowercase I, and then the other three are going to be uppercase X F R. And what that'll do is, uh, when you, um, do when, when less as used as your pager, it'll not clear your screen when when you exit. It will not clear the screen if there's less than one screen of text. So, you know, you use that. And then there's the I think the R was for colors and the I was to ignore case. But anyway, I wasn't sure
Starting point is 01:35:06 like why I needed the I, but this is one of those examples where you like just copy and paste and you're like, Oh, where's all over here. But, um, but I'll have a link to the article where, where I got it. Cause I loved this guy's the, his blog was, uh, them get AWS and other three letter words. And I was like, Oh, that's so great. So at any rate, uh, we'll have a, we'll have a link to that. And then you can, uh, you know, use get like a normal person without having everything like disappear when you're like, yeah, but I wanted to see, I did a get log for three, you know, five, 10 commits. And now that I quit, I, you know, the, the output of log, I no longer see the log anymore. That doesn't do me any good. So yeah. Um, all right. So I'm
Starting point is 01:35:53 going to keep it simple. That was just my one tip. How's that one tip and done. Yeah. I didn't have like 18, like Alan, Mr. Show off. Cheating. So, yeah. So subscribe to us on iTunes, Spotify, Stitcher, wherever you like to find your podcast app. No, not your app, but the podcast. And like I said earlier, we would greatly appreciate it if you would leave us a review.
Starting point is 01:36:21 If you hadn't already, you can find some helpful links. I'm going to say it right this time. www.codingblocks.net slash review. Hey, and while you're at www.codingblocks.net, you can check out our show notes, examples, discussions, and more. And you can send your feedbacks, questions, and rant to our site channel. I'm surprised you didn't go the extra mile and go like www.codingblocks.net slash codingblocks. I was going to mess it up if I did that.
Starting point is 01:36:46 Yeah, okay. Alright, and hey, we got Twitter at CodingBlocks, and if you take a picture of your battle station and tweet it at us, we'll be impressed by it. Also, go to CodingBlocks.net and find other social links at the top of the page, including ones to
Starting point is 01:37:01 join the Slack, for example. So, hit us up.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.