# your commit lives in this branch now :) # remove the last commit from the master branch Oh shit, I accidentally committed something to master that should have been on a brand new branch! # create a new branch from the current state of master Stupid commit message formatting requirements. # follow prompts to change the commit message Oh shit, I need to change the message on my last commit! git commit -amend Warning: You should never amend commits that have been pushed up to a public/shared branch! Only amend commits that only exist in your local copy or you're gonna have a bad time. You could also make the change as a new commit and then do rebase -i in order to squash them both together, but this is about a million times faster. and FML, I didn't put a space after an equals sign. This usually happens to me if I commit, then run tests/linters. # now your last commit contains that change! Mega hat tip to the many many many many many people who suggested adding it! Oh shit, I committed and immediately realized I need to make one small change! # make your change You can use this to get back stuff you accidentally deleted, or just to remove some stuff you tried that broke the repo, or to recover after a bad merge, or just to go back to a time when things actually worked. # each one has an index find the one before you broke everything # you will see a list of every thing you've Oh shit, I did something terribly wrong, please tell me git has a magic time machine!?! git reflog So here are some bad situations I've gotten myself into, and how I eventually got myself out of them in plain english. Git documentation has this chicken and egg problem where you can't search for how to get yourself out of a mess, unless you already know the name of the thing you need to know about in order to fix your problem. Moreover, the git log command shows no new commit on master.Git is hard: screwing up is easy, and figuring out how to fix your mistakes is fucking impossible. For example, the removed file Readme.md has come back. Next, let's switch back to the master branch and check if it's unmodified: $ git switch masterĪs we've seen, on the master branch, all changes to the working tree files we made previously have been restored. Then, we've committed the changes to the feature2 branch. Further, all uncommitted changes have been moved from master to the feature2 branch. & git commit -m 'feature2 is done'ġ file changed, 0 insertions(+), 0 deletions(-)Īs we can see in the output above, git switch -C creates a new branch feature2 and brings us to feature2. Next, let's use the git switch command to move these uncommitted changes to a new branch called feature2: $ git switch -C feature2 This time, we've removed the file Readme.md and added a new ReadmeNew.md file. Next, let's do the same test as git checkout -b on the myRepo project: $ git branchĪs we can see in the output above, we're currently on the master branch. It works pretty much the same as the git checkout -b command. Moreover, we can use the -C option to create a new branch and switch to it in one shot. As its name implies, git switch allows us to switch between branches. Therefore, Git has introduced the git switch command since version 2.23 to clear some of the confusion from the checkout command's overloaded usage. The usage of the checkout command is pretty overloaded. The same command can do many different kinds of operations, such as restoring the working tree files, switching branches, creating branches, moving the head, and so on. Further, there is no new commit on master, either.Īs we've known, Git's checkout command is like a Swiss Army knife. There is no local change on the master branch, as we can see in the output. Now, let's switch back to the master branch and check if we've left it unchanged: $ git checkout master Next, let's stage and commit the changes: $ git add. No changes added to commit (use "git add" and/or "git commit -a")Īs the commands above show, we've created the feature1 branch and moved all uncommitted changes from master to feature1. " to discard changes in working directory) Next, let's test the git checkout command on our myRepo project: $ git branch Moreover, this command will leave the current branch as it is and bring all uncommitted changes to the new branch. The git checkout -b command will create a new branch and switch to it.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |