Creating a branch is a starting point to develop a new feature or fix a bug. This is a basic command that we need to use in our daily work.
I will use my flutter sample repository to explain.
How to create a branch
There is only main branch in the repository at the moment.
Firstly, we need to create a branch. A new branch can be created in the following command.
$ git checkout -b my-test-branch Switched to a new branch 'my-test-branch'
This command is a shortcut command of the following two commands.
$ git branch my-test-branch $ git checkout my-test-branch Switched to branch 'my-test-branch'
This means that a new branch is created based on the current branch. Make sure that you are in the right place to create a new branch. Execute
git pull first to update the current repository to the latest state.
Check the following post if you are not familiar with git commands. It shows the most used commands in daily work.
How to push a new branch to the remote branch
The previous command just creates a new branch in the local repository. It is not pushed to the remote repository. Only we can see it.
Let’s add a commit. It creates a file and commits it.
$ echo "test-file data" > test_file.txt $ git add test_file.txt $ git commit -m "Add test_file.txt" [my-test-branch 1d6c1d2] Add test_file.txt 1 file changed, 1 insertion(+) create mode 100644 test_file.txt
The new commit is added as expected.
$ git log --oneline 1d6c1d2 (HEAD -> my-test-branch) Add test_file.txt 3665d26 (origin/main, origin/HEAD, main) Update select row with shift key
Let’s push it to the remote repository since it’s still only in the local. We can upload the new repository with
git push but it shows an error because the destination is unknown yet.
$ git push fatal: The current branch my-test-branch has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin my-test-branch
I always execute
git push first and then copy the command and paste it.
$ git push --set-upstream origin my-test-branch Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 4 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 298 bytes | 99.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. remote: remote: Create a pull request for 'my-test-branch' on GitHub by visiting: remote: https://github.com/yuto-yuto/flutter_samples/pull/new/my-test-branch remote: To https://github.com/yuto-yuto/flutter_samples.git * [new branch] my-test-branch -> my-test-branch Branch 'my-test-branch' set up to track remote branch 'my-test-branch' from 'origin'.
Now, the new branch is created in the remote repository.
The commit is shown only in
How to remove a branch from local repository
We sometimes create a branch from a different commit or repository. The repository can keep in the local because it isn’t harmful but we want to delete it if it’s in the remote repository to keep the repository tidy.
The command is the following.
-d is shortcut for
git branch -d branch-name git branch --delete branch-name
However, the command shows the following error.
$ git branch -d my-test-branch error: Cannot delete branch 'my-test-branch' checked out at '/home/yuto/root/development/flutter_samples'
Delete command can’t be executed as long as the current branch is the same branch. The current branch must be changed to something else in this case.
Let’s change the branch and try it again.
$ git checkout - Switched to branch 'main' Your branch is up to date with 'origin/main'. $ git branch -d my-test-branch warning: deleting branch 'my-test-branch' that has been merged to 'refs/remotes/origin/my-test-branch', but not yet merged to HEAD. Deleted branch my-test-branch (was 1d6c1d2).
git checkout - goes to the last branch. Then, the delete command works as expected.
Execute one of the following commands if you run into an error that says you need to add
--force option to delete the branch due to some reason.
git branch --delete --force branch-name git branch -D branch-name
How to remove a branch from local repository
The previous command deletes only from the local repository but not from the remote repository. We need to execute an additional command to delete it from the remote.
The command is as follows.
git push -d remote_name branch-name
origin in most cases.
$ git push -d origin my-test-branch To https://github.com/yuto-yuto/flutter_samples.git - [deleted] my-test-branch
The remote branch is deleted as expected. The branch no longer exists in the GitHub repository.
How to remove multiple branches at once
Let’s try to remove multiple branches at once. Let’s create two branches
$ git checkout -b test-branch1 Switched to a new branch 'test-branch1' $ git checkout -b test-branch2 Switched to a new branch 'test-branch2' $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. $ git branch * main test-branch1 test-branch2
We can remove multiple branches at once if the names are provided to the arguments.
$ git branch -d test-branch1 test-branch2 Deleted branch test-branch1 (was 3665d26). Deleted branch test-branch2 (was 3665d26).
How to remove multiple branches with regex
Let’s try to do it in another way. Create two branches.
$ git branch test-branch3 $ git branch test-branch4 $ git branch * main test-branch3 test-branch4
To extract the desired branches, grep can be used with regex.
$ git branch | grep -E test-br[a-z]+[0-9]$ test-branch3 test-branch4
We can pass the result to xargs to execute
git branch -d.
$ git branch | grep -E test-br[a-z]+[0-9]$ | xargs git branch -d Deleted branch test-branch3 (was 3665d26). Deleted branch test-branch4 (was 3665d26).
Check the following post if you want to know more about xargs command.
Are you git beginner? Then, check the following posts too.