DEV Community ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป

DEV Community ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป is a community of 967,911 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Cover image for Checking out multiple branches at the same time in git and moving files between them
Konstantin
Konstantin

Posted on

Checking out multiple branches at the same time in git and moving files between them

Imagine that you're working on some branch that is out of sync with master and you have already made a lot of changes. All of the sudden you realise that you want to move some of the files to a new branch that will be sourced from master (i.e. changes are needed by other members of the team).

Git Worktrees

To do that, you first need to create a git worktree:

git worktree add <folder> master
Enter fullscreen mode Exit fullscreen mode

This will basically create a folder with a repository and checkout master branch. It also creates a link between the new and the "original" repository folder.

You can use git worktree list to list worktrees and git worktree remove to remove them. For more information about git worktree please refer to the official documentation.

Moving files

As mentioned earlier, git worktree creates a link between local folders. That means that your stashes are the same between them. So you can just stash interactively necessary hunks with:

git stash -p
Enter fullscreen mode Exit fullscreen mode

or you can git add unwanted changes, and git stash -k to stash the unstaged files.

Now you need to switch to the new worktree with master and create a new branch:

cd <folder>
git checkout -b new_branch
Enter fullscreen mode Exit fullscreen mode

and do git stash apply. It's better to use apply most of the time and not pop since if you have some conflicts you can always abort without losing stashed changes.

Oldest comments (0)

Update Your DEV Experience Level:

Settings

Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. ๐Ÿ›