5

I recently became a developer at my organization and have been trying to answer the "why have I been doing that?" questions that I've been asking myself while making my way through our developer documentation. One of those questions is the title of this post.

To create a feature branch the command "git co -b insert_feature_branch_here" is given. For some reason, "co" doesn't work for me. I've learned that this is "checkout" which is used to look at another branch but I can't figure out what -b means. Given the context clues, "-b" appears to be a flag that is a compound of "git branch" and "git checkout". Is this the case, though?

Does anyone have input into this? I've searched through Git documentation and the Git cheat sheet and haven't across anything. To avoid these simple questions being asked in the future, does anyone know of online documentation to reference when looking to understand what certain flags mean in the future?

Thanks in advance, Alex

  • 3
    Possible duplicate of [Difference between "checkout" and "checkout -b" when remote exists?](https://stackoverflow.com/questions/52709377/difference-between-checkout-and-checkout-b-when-remote-exists) – Cory Kramer Oct 11 '18 at 18:03

3 Answers3

3

It means, that it will create the branch and then it will check it out.

See https://git-scm.com/docs/git-checkout#git-checkout-emgitcheckoutem-b-Bltnewbranchgtltstartpointgt

Tin
  • 424
  • 5
  • 13
2

From the git docs:

Specifying -b causes a new branch to be created as if git-branch were called and then checked out.

You can think of -b as the flag to use when you want to start working directly in a new branch. It first creates the new branch and then automatically checks you out to that branch so that you can start working within that branch.

chevybow
  • 9,959
  • 6
  • 24
  • 39
2

First of all, congratulations! In my opinion, one of the most important things that you can do to grow as a developer is to keep asking yourself "Why have I been doing that?"

Remember that when you write git checkout -b <insert_feature_branch_here> each word gets parsed and processed independently, so starting with git, which tells the console to load git program from the system path, after that, each word gets inputted into the git program.

A quick git --help allows us to see which types of commands we can input

git --help
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

Now, the command you're interested in is checkout, if you input:

git checkout --help

You'll see a man page with all the parameters that checkout can receive [branch name, how to resolve conflicts, if you want to force the checkout, etc], the important thing here is that these parameters can be inputted in different orders, so how does git know which word refers to the branch name and which word refers to other parameter? By using flags such as -b! Lets say you input:

git checkout -b mycoolbranch -f

git knows that after -b every word will be part of the branch's name until another parameter (or end of line) is found.

So basically that's how the -b (or any other flag in many command tools work)

If you get stuck, --help is always a good starting point. Happy coding!

alfunx
  • 3,080
  • 1
  • 12
  • 23
  • 1
    Thanks for the feedback!! I'll start incorporating the --help program more often :) – Alex Kuligowski Nov 06 '18 at 18:44
  • Your answer is quite friendly, but the explanation of '-b' doesn't fit git manual's explanation (linked in answer of @Tin). Such, this answer must sorrily be regarded wrong. – kitekat Feb 10 '23 at 15:36