Creating a new empty branch for a new project

GitBranchGit Branch

Git Problem Overview


We are using a git repository to store our project. We have our branches departing from the original branch. But now we want to create a small new project to track some documentation. For that we would want to create a new empty branch to start storing our files, and I would want other users of the network to clone that branch.

How can we do that?

I tried some things, but they didn't work.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

It seems to push the branch ok, but when I do a fetch or pull, it downloads information from other branches, and then I also get some extra files from other projects. What's the best solution?

Git Solutions


Solution 1 - Git

You can create a branch as an orphan:

git checkout --orphan <branchname>

This will create a new branch with no parents. Then, you can clear the working directory with:

git rm --cached -r .

and add the documentation files, commit them and push them up to github.

A pull or fetch will always update the local information about all the remote branches. If you only want to pull/fetch the information for a single remote branch, you need to specify it.

Solution 2 - Git

The correct answer is to create an orphan branch. I explain how to do this in detail on my blog.(Archived link)

> ... > > Before starting, upgrade to the latest version of GIT. To make sure > you’re running the latest version, run > > which git > > If it spits out an old version, you may need to augment your PATH with > the folder containing the version you just installed. > > Ok, we’re ready. After doing a cd into the folder containing your git > checkout, create an orphan branch. For this example, I’ll name the > branch “mybranch”. > > git checkout --orphan mybranch > > Delete everything in the orphan branch > > git rm -rf . > > Make some changes > > vi README.txt > > Add and commit the changes > > git add README.txt > git commit -m "Adding readme file" > > That’s it. If you run > > git log > > you’ll notice that the commit history starts from scratch. To switch > back to your master branch, just run > > git checkout master > > You can return to the orphan branch by running > > git checkout mybranch

Solution 3 - Git

Make an empty new branch like this:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

If your proj-doc files are already in a commit under a single subdir you can make the new branch this way:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

which might be more convenient than git branch --orphan if that would leave you with a lot of git rm and git mving to do.

Try

git branch --set-upstream proj-doc origin/proj-doc

and see if that helps with your fetching-too-much problem. Also if you really only want to fetch a single branch it's safest to just specify it on the commandline.

Solution 4 - Git

If your git version does not have the --orphan option, this method should be used:

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

After doing some work:

git add -A
git commit -m <message>
git push origin <newbranch>

Solution 5 - Git

Let's say you have a master branch with files/directories:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

Step by step how to make an empty branch:

  1. git checkout —orphan new_branch_name
  2. Make sure you are in the right directory before executing the following command:
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

In step 2, we simply remove all the files locally to avoid confusion with the files on your new branch and those ones you keep in master branch. Then, we unlink all those files in step 3. Finally, step 4 and after are working with our new empty branch.

Once you're done, you can easily switch between your branches:

git checkout master 
git checkout new_branch

Solution 6 - Git

The best solution is to create a new branch with --orphan option as shown below

git checkout --orphan <branch name>

By this you will be able to create a new branch and directly checkout to the new branch. It will be a parentless branch.

By default the --orphan option doesn't remove the files in the working directory, so you can delete the working directory files by this:

git rm --cached -r

In details what the --orphan does:

> --orphan <new_branch>
>Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from all the other branches and commits.

The index and the working tree are adjusted as if you had previously run git checkout . This allows you to start a new history that records a set of paths similar to by easily running git commit -a to make the root commit.

This can be useful when you want to publish the tree from a commit without exposing its full history. You might want to do this to publish an open source branch of a project whose current tree is "clean", but whose full history contains proprietary or otherwise encumbered bits of code.

If you want to start a disconnected history that records a set of paths that is totally different from the one of , then you should clear the index and the working tree right after creating the orphan branch by running git rm -rf . from the top level of the working tree. Afterwards you will be ready to prepare your new files, repopulating the working tree, by copying them from elsewhere, extracting a tarball, etc.

Solution 7 - Git

On base this answer from Hiery Nomus.

You can create a branch as an orphan:

git checkout --orphan <branchname>

This will create a new branch with no parents. Then, you can clear the working directory with:

git rm --cached -r .

And then you just commit branch with empty commit and then push

git commit -m <commit message> --allow-empty
git push origin <newbranch>

Solution 8 - Git

2022 Update

As of Git 2.23, you can use git switch --orphan <new branch> to create an empty branch with no history. Unlike git checkout --orphan, all tracked files will be removed.

Once you actually have commits on this branch, it can be pushed to the remote repository:

git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>

Solution 9 - Git

i found this help:

git checkout --orphan empty.branch.name
git rm --cached -r .
echo "init empty branch" > README.md
git add README.md
git commit -m "init empty branch"

Solution 10 - Git

I found it here

If you use git 2.23 or above you may be used to git switch and git restore instead of git checkout

So if you need to have an empty branch try this:

git switch --orphan YourNewBranch

That's it :))

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionfazinerosoView Question on Stackoverflow
Solution 1 - GitHiery NomusView Answer on Stackoverflow
Solution 2 - GitSid JainView Answer on Stackoverflow
Solution 3 - GitjthillView Answer on Stackoverflow
Solution 4 - Gitcyb0kView Answer on Stackoverflow
Solution 5 - Gituser1723157View Answer on Stackoverflow
Solution 6 - GitKamal HossainView Answer on Stackoverflow
Solution 7 - GitLinerView Answer on Stackoverflow
Solution 8 - GitmaxrodrigoView Answer on Stackoverflow
Solution 9 - GitQi HuahengView Answer on Stackoverflow
Solution 10 - GitMehdi SoltaniView Answer on Stackoverflow